2 回答

TA贡献1798条经验 获得超7个赞
如果您还不知道 - 您可以在 useEffect 钩子的末尾返回一个函数。每当该效果再次触发时(例如,当其依赖项的值发生变化时),以及在组件卸载之前,都会调用该函数。所以如果你有一个像这样的 useEffect 钩子:
useEffect(() => {
// logic here
return () => {
// clean up
};
}, []); // no dependencies!
相当于:
class SomeComponent extends React.Component {
componentDidMount() {
// logic here
}
componentWillUnmount() {
// clean up
}
}
所以在你的代码中我会添加这个:
useEffect(() => {
let isCancelled = false;
const fetchData = async () => {
try {
// fetch logic omitted...
const data = await AsyncStorage.getItem(STORAGE_KEY);
if (storedThemeID) setThemeID(storedThemeID);
else setThemeID(THEMES[1].key);
} catch (e) {
throw new Error(e)
}
};
fetchData();
return () => {
isCancelled = true;
};
}, [themeID]);

TA贡献1880条经验 获得超4个赞
试试这个
let unmounted = false;
useEffect(() => {
(async () => {
const storedThemeID = await AsyncStorage.getItem(STORAGE_KEY);
if (!unmounted) {
if (storedThemeID) setThemeID(storedThemeID);
else setThemeID(THEMES[1].key);
}
})();
return () => {
unmounted = true;
};
}, []);
添加回答
举报