React的生命周期分为三个阶段:1.初始化阶段 2.更新阶段 3.销毁阶段 一,初始化阶段 (1) 方法:getDefaultProps(); 作用:作用于组件类,只调用一次,获取默认的props,也可以用dufaultProps设置组件的默认属性; 注意:全局调用一次,不可使用setstate; (2) 方法:getInitialState(); 作用:作用于组件实例,实例创建时调用一遍,用于初始化每个实例的state,此时可以访问this.props; 注意:在es6的class语法中,没有这个钩子函数,可以直接在构造器constructor中定义this.state,此时可以访问this.props,调用一次,不可使用setstate; (3) 方法:constructor(); 作用:获取到父组件传下来的的props,context,如果你想在constructor构造函数内部使用props或context则需要传入super对象; 注意:如果在构造器中只用到一种或者没有用到参数,可以不进行参数传递; (4) 方法:componentWillMount(); 作用:组件将要渲染的时候调用,处于组件刚经历constructor初始化完数据但是组件还没有进入渲染render时期; 注意:此方法更多的用于服务端渲染,调用一次,可以使用setstate; (5) 方法:render(); 作用:组价渲染,render函数插入生成的dom(文档对象模型)结构,react会生成虚拟dom树,在每一次组件更新的时候,react会通过diff算法比较更新前后的dom树,找到最小的有变化的dom节点进行重新渲染; 注意:在react16中render函数允许返回一个数组,单个字符串等,调用多次,不可使用setstate; (6) 方法:componentDidMount(); 作用:组件渲染结束后调用,只调用一次; 注意:可以在这个方法里调用ajax请求,返回数据setState后组件会重新渲染,调用一次,可以使用setstate; 二,更新阶段 (1) 方法:componentWillReceiveProps(nextProps); 作用:接受父组件改变后的props,需要重新渲染时调用,接受的参数nextProps和this.props进行对比,将setState(nextProps)为当前组件的state,并且重新渲染; 注意:组件初始化时不调用,任意调用次数,可以使用setstate; (2) 方法:shouleComponentUpdate(nextProps,nextState); 作用:组件在接受新的props和state时调用,通过在此方法中对比当前和改变后的props,state,如果相同返回false进行阻断更新。因为相同的属性状态一定会生成相同的dom树,这样就不需要创造新的dom树和旧的dom树进行diff算法对比; 注意:react性能优化最重要的一环,特别适用于dom结构复杂的时候,任意调用次数,不可以使用setstate; (3) 方法:componentWillUpdata(nextProps, nextState); 作用:组件初始化时不调用,组件将要更新时调用; 注意:使用该方法做一些更新之前的准备工作,任意调用次数,不可以使用setstate; (4) 方法:render(); 作用:组件渲染; (5) 方法:componentDidUpdate(); 作用:组件更新完成后调用,此时可以获取dom节点; 注意:组件初始化时不调用,任意调用次数,可以使用setstate; 三,销毁阶段 (1) 方法:componentWillUnmount(); 作用:组件将要卸载时调用; 注意:清除一些组件监听以及定时器等,调用一次,不可使用setstate;