我有一个简单的hello-world示例来尝试useState
钩子;但是,当我在控制台中输出测试信息时,我发现每当我启用useState
时,控制台日志就会记录到信息的两倍。
参见示例 in CodeSandbox (控制台中显示了调试信息)。
发布于 2020-04-08 17:52:35
控制台语句在函数体中,React
将在每次呈现时执行函数体。
React
将再次执行函数体,然后用更新的值记录状态。在使用
React.StrictMode
时,它可以多次呈现组件。这就是您多次看到控制台日志的原因。 提交阶段通常非常快,但呈现可能很慢。因此,即将到来的并发模式(默认情况下尚未启用)将呈现工作分解为碎片,暂停并继续工作,以避免阻塞浏览器。这意味着React可以在提交之前多次调用呈现阶段生命周期,或者它可以在不提交的情况下调用它们(因为错误或优先级较高的中断)。呈现阶段生命周期包括以下类组件方法:
,因为上面的方法可能不止一次调用,所以它们不包含副作用是很重要的。忽略此规则会导致各种问题,包括内存泄漏和无效的应用程序状态。不幸的是,很难发现这些问题,因为它们往往是不确定的.
您可以阅读更多关于React.StrictMode
这里的内容。
发布于 2020-04-08 17:48:44
您的index.js有带有React.StrictMode的应用组件包装器。
这就是导致它的原因。
发布于 2020-04-08 17:44:29
useEffect异步运行,所以在开始时,首先将呈现组件作为其正常行为,然后useEffect运行,正如我们所知,每个setState将导致组件重新呈现,这是第二次,这就是为什么您看到它记录两次
https://stackoverflow.com/questions/61112615
复制相似问题