UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

1 lines • 3.61 kB
{"version":3,"file":"useFocusEffect.js","names":[],"sources":["esm/useFocusEffect.js"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useOptionalNavigation } from \"./link/useLoadedNavigation\";\nfunction useFocusEffect(effect, deps = []) {\n const navigation = useOptionalNavigation();\n const prevDepsRef = useRef(deps);\n const depsCountRef = useRef(0);\n if (!Array.isArray(deps) || !Array.isArray(prevDepsRef.current) || prevDepsRef.current.length !== deps.length || prevDepsRef.current.some((d, i) => !Object.is(d, deps[i]))) {\n prevDepsRef.current = deps;\n depsCountRef.current++;\n }\n useEffect(() => {\n if (!navigation) {\n return;\n }\n let isFocused = false;\n let cleanup;\n const callback = () => {\n const destroy = effect();\n if (destroy === void 0 || typeof destroy === \"function\") {\n return destroy;\n }\n if (process.env.NODE_ENV !== \"production\") {\n let message = \"An effect function must not return anything besides a function, which is used for clean-up.\";\n if (destroy === null) {\n message += \" You returned 'null'. If your effect does not require clean-up, return 'undefined' (or nothing).\";\n } else if (typeof destroy.then === \"function\") {\n message += \"\\n\\nIt looks like you wrote 'useFocusEffect(async () => ...)' or returned a Promise. Instead, write the async function inside your effect and call it immediately:\\n\\nuseFocusEffect(\\n React.useCallback(() => {\\n async function fetchData() {\\n // You can await here\\n const response = await MyAPI.getData(someId);\\n // ...\\n }\\n\\n fetchData();\\n }, [someId])\\n);\\n\\nSee usage guide: https://reactnavigation.org/docs/use-focus-effect\";\n } else {\n message += ` You returned '${JSON.stringify(destroy)}'.`;\n }\n console.error(message);\n }\n };\n if (navigation.isFocused()) {\n cleanup = callback();\n isFocused = true;\n }\n const unsubscribeFocus = navigation.addListener(\"focus\", () => {\n if (isFocused) return;\n cleanup?.();\n cleanup = callback();\n isFocused = true;\n });\n const unsubscribeBlur = navigation.addListener(\"blur\", () => {\n cleanup?.();\n cleanup = void 0;\n isFocused = false;\n });\n return () => {\n cleanup?.();\n unsubscribeFocus();\n unsubscribeBlur();\n };\n }, [navigation, depsCountRef.current]);\n}\nexport {\n useFocusEffect\n};\n//# sourceMappingURL=useFocusEffect.js.map\n"],"mappings":";;;;AAEA,SAAS,eAAe,QAAQ,OAAO,CAAC,GAAG;CACzC,MAAM,aAAa,sBAAsB;CACzC,MAAM,cAAc,OAAO,IAAI;CAC/B,MAAM,eAAe,OAAO,CAAC;CAC7B,IAAI,CAAC,MAAM,QAAQ,IAAI,KAAK,CAAC,MAAM,QAAQ,YAAY,OAAO,KAAK,YAAY,QAAQ,WAAW,KAAK,UAAU,YAAY,QAAQ,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG,GAAG,KAAK,EAAE,CAAC,GAAG;EAC3K,YAAY,UAAU;EACtB,aAAa;CACf;CACA,gBAAgB;EACd,IAAI,CAAC,YAAY;GACf;EACF;EACA,IAAI,YAAY;EAChB,IAAI;EACJ,MAAM,iBAAiB;GACrB,MAAM,UAAU,OAAO;GACvB,IAAI,YAAY,KAAK,KAAK,OAAO,YAAY,YAAY;IACvD,OAAO;GACT;GACA,IAAI,QAAQ,IAAI,aAAa,cAAc;IACzC,IAAI,UAAU;IACd,IAAI,YAAY,MAAM;KACpB,WAAW;IACb,OAAO,IAAI,OAAO,QAAQ,SAAS,YAAY;KAC7C,WAAW;IACb,OAAO;KACL,WAAW,kBAAkB,KAAK,UAAU,OAAO,EAAE;IACvD;IACA,QAAQ,MAAM,OAAO;GACvB;EACF;EACA,IAAI,WAAW,UAAU,GAAG;GAC1B,UAAU,SAAS;GACnB,YAAY;EACd;EACA,MAAM,mBAAmB,WAAW,YAAY,eAAe;GAC7D,IAAI,WAAW;GACf,UAAU;GACV,UAAU,SAAS;GACnB,YAAY;EACd,CAAC;EACD,MAAM,kBAAkB,WAAW,YAAY,cAAc;GAC3D,UAAU;GACV,UAAU,KAAK;GACf,YAAY;EACd,CAAC;EACD,aAAa;GACX,UAAU;GACV,iBAAiB;GACjB,gBAAgB;EAClB;CACF,GAAG,CAAC,YAAY,aAAa,OAAO,CAAC;AACvC"}