You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Hooks中子组件useEffect早于父组件执行的原因是什么?

useEffect执行顺序原理解答

你观察到的执行顺序是React的正常运行规则,核心原因是两个React的设计逻辑:

1. useEffect的执行遵循「先子后父」的深度优先顺序

React的渲染流程分为两个阶段:

  • 渲染阶段:从父组件到子组件依次执行组件函数,计算需要更新的DOM,这个阶段是自上而下的
  • 提交阶段:完成真实DOM更新后,执行useEffect回调,这个阶段是自下而上的:必须等所有子组件的副作用执行完成,才能判定父组件完全挂载完成,因此子组件的useEffect永远会比父组件的useEffect先执行。

2. 同一组件内的useEffect按代码声明顺序执行

同一个组件中定义的多个useEffect,会严格按照它们在代码里写的先后顺序执行。

对应你的代码初始挂载时的完整执行流程:

  1. 执行父组件函数,初始化fields状态为传入的初始数组,生成包含ChildComponent的JSX
  2. 执行子组件函数,接收props.fields,生成列表JSX
  3. React完成所有真实DOM的插入操作
  4. 按自下而上顺序执行所有useEffect:
    • 先执行子组件的useEffect,打印 child component
    • 再执行父组件内的所有useEffect,按声明顺序先跑空依赖的effect,打印on mount,再跑依赖fields的effect,打印parent component
      和你看到的控制台输出完全一致。

额外验证(点击修改按钮时的执行顺序):

点击按钮修改fields后,你会看到输出顺序为child component → parent component,符合上述规则:子组件effect先执行,父组件只有依赖fields的effect会触发,空依赖的effect只会在初始挂载执行一次。


内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:09:03