这件事困扰了我一段时间,我认为是时候解决这个问题了。
在Codesandbox.io中,您可以看到Countdown组件重新发布整个父组件。只有当我显示"子组件"时才会发生这种情况。您可以尝试替换为和计数器,但只能重新发送本身。
帮我吧,因为我不知道为什么反应会这样。
谢谢!
在计数器组件中,您正在调用setState(setCounter(,它正在更新父组件的状态。当使用useState Hook更新父组件的状态时。它将重新渲染整个组件,当整个组件被重新渲染时,你已经声明了
const SubComponent = () => {
return <SubSubComponent />;
};
该子组件将再次被声明和初始化(每次组件被重新渲染时(。
实际上没有必要在应用程序组件中声明这个子组件,你可以简单地使用它
如果你不希望组件每次都得到它的新实例,你可以使用记忆等技术,这样子组件只有在道具中的东西发生变化时才能重新渲染。此外,只有当依赖项中的某些内容发生更改时,才使用回调来创建新函数。
在Codesandbox.io中,您可以看到Countdown组件重新发布整个父组件。只有当我显示"子组件"时才会发生这种情况
即使您是否有子组件,它也会重新提交父组件,因为状态存在于父应用程序组件中。
你的子组件也会被重新渲染,因为每次你都在创建它的新实例