【发布时间】:2021-07-05 11:34:57
【问题描述】:
在 React Native 应用程序中,App.js 中有两个组件 A 和 B,它们随着 k 状态变化而切换。
App.js
...
const App = () => {
const [ k, setK ] = useState(false);
const toggleK = () => setK(!k);
if(k) {
return <A />;
}else {
return <B toggleK={toggleK} />;
}
};
...
在A 中,setInterval 在useffect 中初始化。它每 10 秒调用一次异步函数。但是当它在App.js 中的K 状态更改上卸载时,清理功能不会运行(没有记录A unmounting...),clearInterval 也是如此。
我在这里做错了什么?
...
const A = () => {
const [ someState, setSomeState ] = useState(...);
let timer;
useEffect(() => {
if(!timer) {
timer = setInterval(async () => await run_async_func(), 10000);
}
return () => {
console.log('A unmounting...');
clearInterval(timer);
};
}, [ someState ]);
};
...
【问题讨论】:
-
useState(...)在A里面有什么?您在依赖数组中传递someState,这意味着 A unomounting... 不会运行,除非 someState 发生变化。 -
@TayyabMazhar 哦,开枪。是的,忽略了!现在可以了。
-
@Waleed93 如果 useEffect 的第一部分调用为什么不调用第二部分(我的意思是如果 setInterval 部分调用为什么不 clearInterval)?
标签: javascript reactjs react-native react-hooks