2016-01-15 90 views
3

有人可以解释一下到底发生了什么我的下一个背景:阵营:componentWillUpdate

假设我有一个应用程序的组件(父),有的孩子部件假设索引,搜索,关于和这3个有自己的孩子。

当我在应用程序组件中调用componentWillUpdate时会发生什么,新状态/道具将会出现,但叶子(儿童)内会发生什么,他们会重新渲染自己吗?

假设我在应用程序的这个componentWillUpdate中覆盖了DOM中的某些东西,并且我将在componentDidMount或componentWillMount中的叶子组件中的DOM中使用同样的东西...哪个值将是最后一个?

+0

我建议你阅读生命周期方法的文档(https://facebook.github.io/react/docs/component-specs.html#lifecycle-methods)。我认为这里有很好的解释。一般而言,您希望避免自己更改DOM,而是让React尽可能地根据状态变化呈现您的DOM。 – Mark

回答

5

首先,您不应该手动拨打componentWillUpdate。如果作为其生命周期的一部分,则由React调用。

根据comment in ReactCompositeComponent.js这是在更新阶段什么hapens:

Update Phases: 
     - componentWillReceiveProps (only called if parent updated) 
     - shouldComponentUpdate 
      - componentWillUpdate 
      - render 
      - [children's constructors or receive props phases] 
      - componentDidUpdate 

正如你可以看到App.render渲染儿童copmonents之前被调用。

如果您想由于某种原因手动操作DOM,则componentWillUpdate不适合执行此操作。每次更新后使用componentDidUpdate或初始渲染后使用componentDidMount。父母的生命周期方法之前触发儿童的componentDidUpdatecomponentDidMount