【发布时间】:2021-01-28 05:03:50
【问题描述】:
考虑下面的代码
useEffect(effect, [v]) // v can be undefined
我想仅在第一次渲染后或v 更改时运行effect 函数。
我的问题是
- 是否需要检查
v是否在effect中发生变化?或者我可以依靠 react 来检查依赖列表的值(即[v])。 - 如果 1. 的答案是后者,这种行为是否应该在不久的将来改变?例如,当并发模式被释放时。
有条件地触发一个效果
效果的默认行为是 每次完成渲染后触发效果。这样效果就出来了 如果其依赖项之一发生更改,则始终重新创建。
上面写着 if one of its dependencies changes, then, an effect is recreated。但是,它没有提到相反的情况:当且仅当其依赖项之一发生更改时,才会重新创建效果。
我只记得在hook的早期,我在某处读到effect函数在某些情况下即使不更改v也可以运行,以优化内存,还是在并发模式下? ?实在记不太清了,也查不到出处。
如果有人能告诉我 React 到底是怎么做的,或者参考 react 的相关内部源代码,那将非常有帮助。我认为他们会对第一次渲染进行特殊检查,否则当v 在第一次渲染后为undefined 时,effect 将不会运行。
【问题讨论】:
-
我对并发模式知之甚少,但检查
v是否更新是 dep 数组的确切目的,所以它必然是多余的——我的东西我确定 React 团队不需要我们 -
无需内部检查。 React 会自行检查。 18 个月的并发模式实验性 - 不会对 useEffect 进行重大更改。
标签: reactjs dependencies react-hooks react-fiber