【问题标题】:Is it safe to call componentWillReceiveProps() with side effects使用副作用调用 componentWillReceiveProps() 是否安全
【发布时间】:2017-11-19 22:22:03
【问题描述】:

在 React 的 componentWillReceiveProps 函数中,如果我先检查 props 是否发生变化,是否可以进行 AJAX 调用?似乎这个函数可能在 React Fiber 中被多次调用(post 16 beta)并且这个博客(https://medium.com/@baphemot/understanding-reactjs-component-life-cycle-823a640b3e8d)建议不应该执行任何副作用。但是,我在 React 文档中没有看到这样的警告,我认为只有在 props 发生更改时才会调用 AJAX。

【问题讨论】:

  • 那么为什么不在componentDidUpdate 中进行ajax 调用呢?
  • @xDreamCoding,我正在使用这个 Redux 示例 github.com/reactjs/redux/blob/master/examples/async/src/…。我猜这是因为不需要使用任何 DOM 节点,所以尽可能早地进行 AJAX 调用,并在响应返回时调用 dispatch,此时重新发生渲染。
  • 我认为你可以信任 reactjs 团队核心贡献者的 repo 示例。所以他们在那里所做的应该被认为是最佳实践,不是吗?我只是怀疑你能否在 Stackoverflow 上得到更好的答案。
  • @xDreamCoding,好吧,有时文档没有跟上最新版本,但对于像 React 这样的项目来说,这可能不太可能。谢谢。

标签: reactjs


【解决方案1】:

根据最近的(React 16.3+)文档,这被认为是不安全的,并回复您的确切查询:

使用这种生命周期方法通常会导致错误和不一致, 因此,它将在未来被弃用。

如果您需要执行副作用(例如,数据提取或 动画)响应道具的变化,使用componentDidUpdate 而是生命周期。

【讨论】:

    【解决方案2】:

    在 OnWillReceiveProps 中拨打电话是可以的,但您可以定义一个有意义的条件,如果您的条件很好,您就不应该有很多电话。无论如何,在大多数情况下,您应该避免使用 OnWillReceiveProps,这在性能方面有点贪婪

    【讨论】:

      猜你喜欢
      • 2012-07-09
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2020-04-02
      • 2021-04-27
      • 1970-01-01
      相关资源
      最近更新 更多