众所周知,要学习一个框架,name他的生命周期是非常重要的一部分,不仅仅会对提高组价的性能有所帮助,并且也会对数据的更新刨坑有一些帮助。
react的生命周期主要分为三部分:
即 1、初始化 2、更新 3、销毁
example:
var ShowTitle = React.createClass({ getDefaultProps:function () {
return {
title:"将前端坚持到底!"
}
},
render:function(){
return <h1>{this.props.title}</h1>
}
})
//渲染
ReactDOM.render(
<ShowTitle/>, //在未设置title属性时,显示默认值,设置后覆盖默认值
document.getElementById("container")
)
2、getInitialState()
在使用es6的class语法时是没有这个钩子函数的,可以直接在constructor中定义this.state。此时可以访问this.props
3、componentWillMount() 组件初始化时只调用,以后组件更新不调用,整个生命周期只调用一次,此时可以修改state。
4、render()
react最重要的步骤,创建虚拟dom,进行idff算法,更新dom书都在此进行。此时就不能更改state了。
5、componentDidMount() 组件渲染之后,只调用一次。
componentDidMount()与componentWillMount()的区别,
如果想要获取外部数据并加载到组件上,只能在组件""已经"挂载到真实的网页上才能做这件事,其他情况是加载不到组件的。componentDidMount()方法中的代码,是在组 件已经完全挂载到网页上才会调用被执行,所以可以保证数据的加载。此外,在这方法中调用setState方法,会触发重渲染。所以官方设计这个方法就是用来加载外部数据用的,或处理其他的副作用代码。
constructor被调用是在组件准备要挂载的最一开始,所以此时组件尚未挂载到网页上。与componentWillMount()方法的调用是在constructor之后,在render之前,在这方法里的代码调用setstate方法不会触发重新渲染,所以它一半不会用来作加载数据之用,他也很少被使用到。
一般的从后台(服务器)获取的数据,都会与组件上要用的数据加载有关,所以都在componentDidMount方法里面作。虽然与组件上的数据无关的加载,也可以在constructor里作,但constructor是作组件state初绐化工作,并不是设计来作加载数据这工作的,所以所有有副作用的代码都会集中在componentDidMount方法里。
6、componentWillReceiveProps(nextProps)
组件初始化时不调用,组件接收新的props时调用
nextProps代表这次的props的值。
7、shouldComponentUpdate(nextProps, nextState)
react性能优化非常重要的一环。组件接收新的state或者props时调用,我们可以设置在此对比前后两个props和state是否相同,如果相同则返回false阻止更新,因为相同的属性状态一定会生成相同的dom树,这样就不需要创造新的dom树和旧的dom树进行diff算法对比,节省大量性能,尤其是在dom结构复杂的时候
8、componentWillUpdata(nextProps, nextState)
组件初始化时不调用,只有在组件将要更新时才调用,此时可以修改state
9、render()
组件渲染
10、componentDidUpdate()
组件初始化时不调用,组件更新完成后调用,此时可以获取dom节点
11、卸载
componentWillUnmount()
组件将要卸载时调用,一些事件监听和定时器需要在此时清除。