【问题标题】:Should I rely on the dependency list check of react useEffect hook?我应该依赖 react useEffect 钩子的依赖列表检查吗?
【发布时间】:2021-01-28 05:03:50
【问题描述】:

考虑下面的代码

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

我想在第一次渲染后或v 更改时运行effect 函数。

我的问题是

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

来自react official docs

有条件地触发一个效果

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

上面写着 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


【解决方案1】:

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

希望它也对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 2021-08-19
    • 2021-02-23
    相关资源
    最近更新 更多