React子组件useEffect依赖updateTime但父组件未传,运作原理是什么?
问题解答
首先明确几个核心逻辑:
- 当父组件
Users没有给UsersTable传递updateTime属性时,子组件内的props.updateTime值为undefined。 - 你的
useEffect钩子依赖数组是[props.updateTime],组件初始渲染时,该依赖为undefined,所以会执行一次fetchUsers(1)。 - 之后如果父组件始终未传递
updateTime,这个依赖会一直保持undefined,不会触发变化,因此useEffect不会重复执行。
另外可以排查几种潜在情况:
- 是否
Users组件在某个分支逻辑里动态传递了updateTime,只是你没注意到?比如在条件渲染的分支中补充了这个属性。 - 是否给
UsersTable设置了defaultProps?如果有类似下面的定义,props.updateTime会使用默认值而非undefined:
UsersTable.defaultProps = { updateTime: 0 };
- 是否
UsersTable内部自己声明了同名的updateTime状态?比如用useState定义了变量,和props产生了混淆。
总结:如果确实没传递updateTime,这个useEffect只会在组件首次渲染时执行一次,除非后续父组件开始传递并修改该属性,否则不会再次触发。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

