【发布时间】:2021-05-20 00:59:58
【问题描述】:
我一直使用useEffect() 和[] 作为我想运行一次的代码的参数。但是在已经构建了许多项目之后,我发现如果它在某处呈现组件的一个实例时运行一次,它根本不会在其他任何地方运行。这意味着如果您在其他地方重用该组件,即使它们是第一次渲染,它也不会在其中运行。
父组件
const [bl, setBl] = useState(true);
return (
<div className="App">
<button onClick={(e) => setBl(!bl)}>Click</button>
{bl ? <Comp page="page1" /> : <Comp page="page2" />}
</div>
);
子组件
function Comp({ page }) {
useEffect(() => {
console.log(page);
}, []);
return (
<div>
<h1>Component at {page}</h1>
</div>
);
}
这里只记录“page1”,不记录其他组件的任何内容,即page2
为了在每个实例中记录一次页面名称,我现在在使用效果之前添加var rnd = Math.random();这一行,并添加[rnd]作为参数,以便它在每个实例中运行一次。
所以我的问题是,有没有更好的方法来做到这一点?意味着在每个实例中运行一次,比像我使用的那样依赖随机机会更好?
我可以在这里使用[page],但是如果这里没有任何独特的道具呢?
您可以检查代码框here
【问题讨论】:
-
您的开头段落似乎自相矛盾,如果每个实例运行一次,那么它肯定会在每个实例中运行吗?您是否尝试过在没有条件的情况下包含多个实例?
-
@DBS 语言歧义,我编辑了,谢谢。
-
您可以使用单个组件实现相同的效果:
<Comp {...(bl ? {page:"page1"} : {page:"page2"})} />。
标签: reactjs react-hooks use-effect