Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 为什么函数组件再次按setCount(1)重新渲染_Reactjs_React Hooks_Use State - Fatal编程技术网

Reactjs 为什么函数组件再次按setCount(1)重新渲染

Reactjs 为什么函数组件再次按setCount(1)重新渲染,reactjs,react-hooks,use-state,Reactjs,React Hooks,Use State,代码: Env: render by setCont(1) app render do something render by setCont(1) app render do something render by setCont(1) app render do something render by setCont(1) app render do something render by setCont(1) // why? re-render App Component but eff

代码:

Env:

render by setCont(1)
app render
do something
render by setCont(1)
app render
do something
render by setCont(1)
app render
do something
render by setCont(1)
app render
do something
render by setCont(1) // why? re-render App Component but effectCallback not exec, AppRenderLog Component not re-render
// why others not re-render <App />
  • 反应(v16.13.1)
  • react(v16.12.0)
电流输出:

render by setCont(1)
app render
do something
render by setCont(1)
app render
do something
render by setCont(1)
app render
do something
render by setCont(1)
app render
do something
render by setCont(1) // why? re-render App Component but effectCallback not exec, AppRenderLog Component not re-render
// why others not re-render <App />
通过setCont渲染(1)
应用程序渲染
做点什么
通过setCont进行渲染(1)
应用程序渲染
做点什么
通过setCont进行渲染(1)//为什么?重新渲染应用程序组件,但effectCallback未执行,Appenderlog组件未重新渲染
//为什么其他人不重新渲染

我不知道您想要完成什么,但是如果您将第二个console.log也放在一个效果中,它不会双重记录该效果

  • 第一个日志集来自组件安装
  • 第二个日志集来自
    setTimeout
    中排队的状态更新
  • 第三个(以及随后的)日志集不会出现,因为状态没有真正更新(即设置为相同的值)。您可以通过将初始状态设置为1来测试这一点,即
    useState(1)
    ,您将只看到日志的装载集
代码:

初始状态为1时的控制台日志输出

app render 
do something 
render by setCont(1) 

我的意思是,当我设置为相同的值(second
setCount(1)
)时,不会发生任何事情。实际上,似乎
App()
但函数组件App不会重新渲染。(通过setCont(1)输出日志
渲染)。我不明白。我认为函数
App
不应该像第三个
setCount(1)
(没有发生任何事情)@thalo那样调用,我只希望看到两组日志,正如您所期望的那样。我想我已经很好地解释了两个日志集的原因(以及为什么无关的console.log不起作用)。每个渲染周期调用一次挂钩。您是否在问为什么在渲染周期中多次设置状态只会触发单个渲染?否则我不理解你的评论。
app render 
do something 
render by setCont(1) 
app render 
do something 
render by setCont(1)
app render 
do something 
render by setCont(1)