one
Version:
One is a new React Framework that makes Vite serve both native and web.
52 lines (51 loc) • 2.25 kB
JavaScript
import { useEffect } from "react";
import { useOptionalNavigation } from "./link/useLoadedNavigation.native.js";
function useFocusEffect(effect, deps) {
var navigation = useOptionalNavigation();
useEffect(function () {
if (!navigation) {
return;
}
var isFocused = false;
var cleanup;
var callback = function () {
var destroy = effect();
if (destroy === void 0 || typeof destroy === "function") {
return destroy;
}
if (process.env.NODE_ENV !== "production") {
var message = "An effect function must not return anything besides a function, which is used for clean-up.";
if (destroy === null) {
message += " You returned 'null'. If your effect does not require clean-up, return 'undefined' (or nothing).";
} else if (typeof destroy.then === "function") {
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";
} else {
message += ` You returned '${JSON.stringify(destroy)}'.`;
}
console.error(message);
}
};
if (navigation.isFocused()) {
cleanup = callback();
isFocused = true;
}
var unsubscribeFocus = navigation.addListener("focus", function () {
if (isFocused) return;
cleanup === null || cleanup === void 0 ? void 0 : cleanup();
cleanup = callback();
isFocused = true;
});
var unsubscribeBlur = navigation.addListener("blur", function () {
cleanup === null || cleanup === void 0 ? void 0 : cleanup();
cleanup = void 0;
isFocused = false;
});
return function () {
cleanup === null || cleanup === void 0 ? void 0 : cleanup();
unsubscribeFocus();
unsubscribeBlur();
};
}, [navigation, ...deps]);
}
export { useFocusEffect };
//# sourceMappingURL=useFocusEffect.native.js.map