为什么不应该使用componentWillMount?

Lok*_*wal 25 javascript reactjs redux react-redux

解雇服务器调用在componentWillMount生命周期方法中获取数据是一种不好的做法?

为什么使用componentDidMount更好.

Sag*_*b.g 21

更新 - 可能/ 2018
在一个称为异步呈现的工作进程中有一个新功能可以做出反应.
至于反应,v16.3.2这些方法使用起来并不"安全":

  • componentWillMount
  • componentWillReceiveProps
  • componentWillUpdate

你可以在文档中阅读更多相关信息.


作为一般规则,根本不使用 componentWillMount(如果使用es6 class语法).请改用该constructor方法.
这种生命周期方法适用于同步状态初始化.
componentDidMount另一方面有利于异步状态操作.

为什么
那么,当你在一个异步请求constructor/ componentWillMount你之前render被调用,由当时的异步操作完成的render方法很可能已经完成,没有点设置"初始状态"在这个阶段是它?
我不确定这是你的情况,但开发人员想要异步启动状态的大多数情况componentWillMount是避免第二次render调用.但你无法避免,如上所述,你可以render在异步操作完成之前解雇.
因此,调用异步操作的最佳时间是在render调用并挂载组件(您可以挂载null或为空<div/>)然后获取数据,设置状态并分别重新呈现之后.


Lyu*_*mir 19

引用@Dan Abramov

React的未来版本中,我们希望componentWillMount在某些情况下会多次触发,因此您应该将componentDidMount用于网络请求.

在这里阅读更多.

  • 这是我在某个时候读过的,但从来没有一个合理的理由说明为什么它会被多次调用. (3认同)

mra*_*won 6

componentDidMount 是调用获取数据的最佳位置,原因有两个:

  1. 使用componentDidMount清楚地表明,在初始渲染之后才会加载数据.您需要正确设置初始状态,因此您不会获得undefined导致错误的状态.

  2. 如果您需要在服务器上呈现您的应用程序,componentWillMount将被调用两次(在服务器上,再次在客户端上),这可能不是您想要的.将数据加载代码放入componentDidMount将确保仅从客户端获取数据.通常,您不应该添加副作用componentWillMount.