React生命周期

组件的生命周期


组件会经过三个过程:

  1. 装载过程(Mount),也就是把组件爱你第一次在DOM树中渲染的过程;
  2. 更新过程(Update),当组件被重新渲染的过程;
  3. 卸载过程(Unmount),组件从DOM中删除的过程。

componentWillMount和componentDidMount区别

装在过程

componentWillMount可以在服务器和浏览器端被调用;而componentDidMount只能在浏览器端被调用。在服务器端使用React的时候不会被调用。

更新过程

当组件被装在在DOM树上之后,用户在网页上可以看到组件的第一印象,但是要提供更好的交互体验,就要让该组件可以随用户操作改变展现的内容,当props或者state被修改的时候,就回引发组件的更新过程。

  • componentWillReceiveProps
  • shouldComponentUpdate
  • componentWillUpdate
  • render
  • componentDidUpdate
componentWillReceiveProps

该组件实际上,只要是父组件的render函数被调用,在render函数里面被渲染的子组件就会经历更新过程,不管父组件传给子组件的props有没有改变,都会触发子组件的componentWillReceiveProps函数。

注意,通过this.setState方法触发的更新过程,不会调用这个函数,这是因为这个函数适合根据新的props值(也就是参数nextProps)来计算出是不是要更新内部状态state.更新组件内部状态的方法就是this.setState的调用导致componentWillReceiveProps再一次被调用。拿就是一个死循环了。

shouldComponentUpdate(nextProps,nextState)

除了render函数,shouldComponentUpdate可能是React组件生命周期最重要的一个函数了。说render函数重要,是因为render函数决定了该渲染什么,而说shouldComponentUpdate函数重要,是因为它决定了一个组件什么时候不需要渲染。

shouldComponentUpdate和render函数,也是React生命周期函数中,唯独两个要求有返回结构的函数。render函数的返回结果将用于构造DOM对象,而shouldComponentUpdate函数返回一个布尔值。告诉React库这个组件在这次更新过程中是否要继续。

说shouldComponentUpdate重要,就是因为只要使用恰当,他就能够大大提高React组件的性能,虽然React的渲染性能已经很不错了,但是不管渲染有多快,如果发现没必要重新渲染,那就干脆不用渲染好了,速度会更快。

shouldComponentUpdate的参数就是接下来的props和state值。我们需要在shouldComponentUpdate中比较 this.state.xx ,this.props. xx,nextState.xx和nextProps.xx来进行比较。返回true或false来渲染组件,优化性能。

componentWillUpdate和componentDidUpdate

如果shouldComponentUpdate函数返回true,React接下来就回一次调用对应组件的componentWillUpdate 、render和componentDidUpdate函数。
和装载过程不同的是,当在服务器端使用React渲染时,这一对函数中Did函数,也就是,componentDidUpdate函数,并不是只在浏览器端才执行。无论更新过程发生在服务器端还是浏览器端,该函数都会被调用。

卸载过程

componentWillUnmount。componentWillUnmount和componentDidMount有关,比如,在componentDidMount中用非React的方法创造了一些DOM元素,如果撒手不管可能会造成内存泄露,那就需要在componentWillUnmount中把这些创造的DOM元素清理掉。


React的state来存储状态的一个缺点,拿就是数据的冗余和重复。这就是我们接下来要解决的问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 组件的生命周期方法分以下三个阶段。 Mounting当创建组件的实例并将其插入到DOM中时,将调用这些方法:con...
    _八神光_阅读 1,109评论 0 0
  • 1.组件挂载和卸载时 componentWillMount在render方法之前执行,只会在组件初始化时运行一次,...
    星月西阅读 1,002评论 0 0
  • 又是一个老生常谈的内容,从ES6起已经开始使用class的方式去创建组件,这种创建方式上的变化也带来了写法和方法上...
    殷灬商阅读 465评论 0 1
  • 译自 React Component Lifecycle 每个组件都有若干生命周期函数。如函数名称所示,带有wil...
    KrisLeeSH阅读 564评论 0 0
  • 这一部分内容一直一知半解,最近发现一篇文章,非常好的解释了生命周期的问题,留存在这里,以备后查! 简介 一个rea...
    春木橙云阅读 944评论 0 5