我应该依靠react useEffect挂钩的依赖项列表检查吗?

时间:2020-10-13 19:56:35

标签: reactjs dependencies react-hooks react-fiber

考虑以下代码

useEffect(effect, [v]) // v can be undefined

我只想在第一个渲染之后或effect更改时仅运行功能。

我的问题是

  1. 我是否需要检查v中的v是否发生了变化?或者,我可以依靠react来检查依赖项列表的值(即effect)。
  2. 如果答案为1.,后者是否应该在不久的将来改变?例如,当并发模式被释放时。

来自react official docs

有条件地触发效果

效果的默认行为是 在每个完成的渲染后触发效果。这样的效果是 如果其依赖项之一发生更改,则始终会重新创建。

如果 [v]然后one of its dependencies changes。但是,它没有提及相反的情况:当且仅当其依赖关系之一发生变化时,才会重新创建效果。

我只记得在钩子的早期阶段,我读到某个地方an effect is recreated函数即使在不更改effect的情况下也可以运行,以优化内存,或者在并发模式下?我真的不记得确切,也找不到源。

如果任何人都可以告诉我React的工作方式,或者参考相关的react内部源代码,这将非常有帮助。我认为他们将对第一个渲染进行特殊检查,否则,当v在第一个渲染之后为v时,undefined将不会运行。

1 个答案:

答案 0 :(得分:0)

我还在 react repo here 上发布了这个问题。该线程帮助我解决了我的问题。

希望它也能帮助其他人。