You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
2.9 KiB
1 line
2.9 KiB
{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport * as React from 'react';\nimport useNavigation from \"./useNavigation\";\nexport default function useNavigationState(selector) {\n var navigation = useNavigation();\n var _React$useState = React.useState(function () {\n return selector(navigation.getState());\n }),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n setResult = _React$useState2[1];\n var selectorRef = React.useRef(selector);\n React.useEffect(function () {\n selectorRef.current = selector;\n });\n React.useEffect(function () {\n var unsubscribe = navigation.addListener('state', function (e) {\n setResult(selectorRef.current(e.data.state));\n });\n return unsubscribe;\n }, [navigation]);\n return selector(navigation.getState());\n}","map":{"version":3,"sources":["useNavigationState.tsx"],"names":["React","useNavigation","useNavigationState","selector","navigation","setResult","useState","getState","selectorRef","useRef","useEffect","current","unsubscribe","addListener","e","data","state"],"mappings":";AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAG9B,OAAOC,aAAa;AAWpB,eAAe,SAASC,kBAAkB,CACxCC,QAAgC,EAC7B;EACH,IAAMC,UAAU,GAAGH,aAAa,EAA6B;EAI7D,sBAAsBD,KAAK,CAACM,QAAQ,CAAC;MAAA,OAAMH,QAAQ,CAACC,UAAU,CAACG,QAAQ,EAAE,CAAC;IAAA,EAAC;IAAA;IAAlEF,SAAS;EAGlB,IAAMG,WAAW,GAAGR,KAAK,CAACS,MAAM,CAACN,QAAQ,CAAC;EAE1CH,KAAK,CAACU,SAAS,CAAC,YAAM;IACpBF,WAAW,CAACG,OAAO,GAAGR,QAAQ;EAChC,CAAC,CAAC;EAEFH,KAAK,CAACU,SAAS,CAAC,YAAM;IACpB,IAAME,WAAW,GAAGR,UAAU,CAACS,WAAW,CAAC,OAAO,EAAGC,UAAAA,CAAC,EAAK;MACzDT,SAAS,CAACG,WAAW,CAACG,OAAO,CAACG,CAAC,CAACC,IAAI,CAACC,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,OAAOJ,WAAW;EACpB,CAAC,EAAE,CAACR,UAAU,CAAC,CAAC;EAEhB,OAAOD,QAAQ,CAACC,UAAU,CAACG,QAAQ,EAAE,CAAC;AACxC","sourceRoot":"../../src","sourcesContent":["import * as React from 'react';\nimport useNavigation from './useNavigation';\n/**\n * Hook to get a value from the current navigation state using a selector.\n *\n * @param selector Selector function to get a value from the state.\n */\nexport default function useNavigationState(selector) {\n const navigation = useNavigation();\n\n // We don't care about the state value, we run the selector again at the end\n // The state is only to make sure that there's a re-render when we have a new value\n const [, setResult] = React.useState(() => selector(navigation.getState()));\n\n // We store the selector in a ref to avoid re-subscribing listeners every render\n const selectorRef = React.useRef(selector);\n React.useEffect(() => {\n selectorRef.current = selector;\n });\n React.useEffect(() => {\n const unsubscribe = navigation.addListener('state', e => {\n setResult(selectorRef.current(e.data.state));\n });\n return unsubscribe;\n }, [navigation]);\n return selector(navigation.getState());\n}\n//# sourceMappingURL=useNavigationState.js.map"]},"metadata":{},"sourceType":"module"} |