React组件生命周期和状态更新

2017-03-10  本文已影响0人  五月的约修亚

生命周期

参考:http://wiki.jikexueyuan.com/project/react/component-specs-lifecycle.html

生命周期 API 说明 备注
挂载 componentWillMount 组件初始化渲染之前立刻调用 只调用一次
挂载 componentDidMount 组件初始化渲染后立刻调用 只调用一次
更新 comcponentWillReceiveProps 在组件接收到新的props的时候调用 初始化渲染时不会调用
更新 shouldComponentUpdate 在接收到新的props或者 state,将要渲染之前调用。 初始化渲染时不会调用
更新 componentWillUpdate 在接收到新的props或者state之前立刻调用 初始化渲染时不会调用
更新 componentDidUpdate 在组件的更新已经同步到 DOM 中之后立刻被调用 初始化渲染时不会调用
移除 componentWillUnmount 在组件从 DOM 中移除的时候立刻被调用。 在该方法中执行任何必要的清理,比如无效的定时器

componentWillUpdate

当组件收到新的props或者state,在render之前会回调该函数。
注意不能在该方法中使用 this.setState(),否则会导致无限循环。如果需要在收到新的prop后更新state,应该使用 componentWillReceiveProps 方法,在该方法中使用this.setState()不会触发组件重新渲染。

componentDidUpdate

可以在该方法中使用this.setState()
如果在该方法中使用 this.setState()会更新该组件,更新组件的同时又会触发componentDidUpdate从而重复调用this.setState(),这会导致无限循环。
正确的做法是加入一个终止条件,使得在调用过程中能正确退出

componentDidUpdate: function() {
    if(condition) {
        this.setState({..})
    } else {
        //do something else
    }
}

setState方法详解

this.setState({...}, function(){
    ...
})
上一篇 下一篇

猜你喜欢

热点阅读