react组件生命周期
一个React组件的生命周期分为实例化,存在期,销毁
实例化
组件在客户端被实例化,第一次被创建时,以下方法依次调用
1.getDefaultProps//ES6/ES7创建时这个方法不可用
2.getInitialState//ES6/ES7创建时这个方法不可用
3.componentWillMount
4.render
5.componentDidMount
组件在服务端被实例化,第一次被创建时,以下方法依次调用
1.getDefaultProps
2.getInitialState
3.componentWillMount
4.render
在服务端在渲染过程中componentDidMount不会被调用
这里只讨论组件在前端的生命周期。
定义一个组件
class Demo extends React.Component{
render(){
return (
<div>Hello,I'm {this.props.name},{this.props.age}</div>
)
}
}
getDefaultProps
getDefaultProps 这个方法只会调用一次,返回的对象可以用于设置默认的props,只适合React.createClass使用,使用ES6/ES7创建的这个方法不可用。
可以在挂载组件的时候设置props
<Demo name="ZiYe" age="18"/>
getInitialState
设置state初始值,只适合React.createClass使用,ES6初始化state方法如下
constructor(props){
super(props);
this.state = {
like:false
};
}
可通过this.setState 方法修改state
componentWillMount
该方法会在组件首次渲染之前调用,这个是在render方法调用前可修改state的最后一次机会。这个方法很少用到。
render
该方法会创建一个虚拟DOM。
React只更新必要的东西,React DOM会将元素和子元素与之前的状态比较,然后只更新必要的部分使DOM变为所希望的状态
componentDidMount
这个方法在首次真实DOM渲染后调用,仅此一次。
存在期
当props或者state发生变化时,会依次调用下列方法:
componentWillReceiveProps
1.shouldComponentUpdate(nextProps,nextState)
是否应该更新组件,默认返回true,当返回false时,后期函数就不调用,组件不会再次渲染。
2.componentWillUpdate
3.render
与实例化render相同
4.componentDidUpdate
更新真实的DOM成功后调用
销毁期
componentWillUnmount
每当React使用完一个组件,这个组件必须从 DOM 中卸载后被销毁,此时 componentWillUnmout 会被执行,完成所有的清理和销毁工作,在 componentDidMount 中添加的任务都需要再该方法中撤销,如创建的定时器或事件监听器