我的useEffect()钩子是总是被调用两次。有两个依赖项:reinitializePage(当设置为true时,将调用useEffect)和corporateContext(当上下文发生变化时,应更新组件)。
const [reinitializePage, setReinitializePage] = useState(true);
useEffect(() => {
if (reinitializePage === true || corporateContext) {
(async () => { ... })();
setReinitializePage(false);
}
}, [reinitializePage, corporateContext]);
- 我明白为什么它总是触发两次。
*默认情况下,reinitializePage设置为true,因此useEffect将触发,在更改为false后,由于reinitializePage是依赖项,因此将再次触发,并且由于if语句中存在“or”条件,并且始终填充corporateContext,它将再次触发。如果我不将corporateContext添加到if条件,则当上下文更改时,它不会触发useEffect,因为reinitializePage设置为false。我无法添加“&&“条件,因为这两个依赖项没有相互跟随。
因此,我如何确保当第一次触发发生时,以及当reinitializePage在useEffect中设置为false时,如何确保reinitialize页面从true更改为false后,不再触发它。
3条答案
按热度按时间1zmg4dgp1#
您可以使用多个useEffect:
knsnq2tg2#
我也遇到过类似的问题,这个问题就是StrictMode。
对于NextJS,将reactStrictMode设置为假:
对于React,删除StrictMode块:
详情请参阅:https://beta.reactjs.org/reference/react/StrictMode
gab6jxml3#
也许可以将
reinitializePage
存储在useRef
中:在这种情况下,如果
reinitializePageRef
发生更改,useEffect
不会更新,因此如果您在其他地方设置此值,它可能不起作用。