React个人学习感悟(三)

组件的生命周期

组件在初始化时会触发5个钩子函数:

1、getDefaultProps()

作用于组件类,只调用一次,返回对象用于设置默认的props,也可以用dufaultProps设置组件的默认属性。

2、getInitialState()

实例创建时调用一次,用于初始化每个实例的state。在使用es6的class语法时是没有这个钩子函数的,可以直接在constructor中定义this.state。此时可以访问this.props。

3、componentWillMount()

组件初始化时调用,在完成首次渲染之前调用,以后组件更新不调用,整个生命周期只调用一次,此时可以修改组件的state。

4、 render()

react最重要的步骤,必须选的方法,创建虚拟dom,进行diff算法,更新dom树都在此进行。此时就不能更改state了。只能通过this.props和this.state访问数据。可以返回null,false 和其他React组件。

5、componentDidMount()

组件渲染之后调用,可以通过this.getDOMNode()获取和操作dom节点,只调用一次。

在更新时也会触发5个钩子函数:

6、componentWillReceivePorps(nextProps)

组件初始化时不调用,组件接受新的props时调用。此时可以更改组件的props和state。

componentWillReceiveProps (nextProps) { if (nextProps.look) { this.setState({ look: true }) }}

7、shouldComponentUpdate(nextProps, nextState)

react性能优化非常重要的一环。组件接受新的state或者props时调用,我们可以设置在此对比前后两个props和state是否相同,如果相同则返回false阻止更新,因为相同的属性状态一定会生成相同的dom树,这样就不需要创造新的dom树和旧的dom树进行diff算法对比,节省大量性能,尤其是在dom结构复杂的时候。不过调用this.forceUpdate会跳过此步骤。

8、componentWillUpdate(nextProps, nextState)

组件初始化时不调用,接受到新的 props 和state后,进行渲染之前调用(组件将要更新时调用),此时不允许更新 props 和 state。

9、render()

在此就不多说了,同上一个render()

10、componentDidUpdate()

组件初始化时不调用,组件更新完成后调用,此时可以获取dom节点。

还有一个卸载钩子函数:

11、componentWillUnmount()

组件将要卸载时调用,一些事件监听和定时器需要在此时清除。

以上可以看出来react总共有10个周期函数(render重复一次),这个10个函数可以满足我们所有对组件操作的需求,利用的好可以提高开发效率和组件性能。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180309G0CFVG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券