美文网首页纵横研究院React技术专题社区
【学习笔记 】React ④ 生命周期以及使用场景

【学习笔记 】React ④ 生命周期以及使用场景

作者: Moombahton | 来源:发表于2019-12-09 11:42 被阅读0次

    组件生命周期

    React组件的生命周期可分成三个状态:

    • Mounting:组件挂载
    • Updating:组件更新
    • Unmounting:组件卸载
    生命周期.png
    • componentWillMount()
      在组件即将被挂载到页面的时刻自动执行
    • render()
      数据变化自动执行
    • componentDidMount()
      组件被挂载到页面之后,自动执行
    • componentWillReceiveProps()
      当一个组件从父组件接受一个参数只要父组件的render函数重新被执行,子组件的这个生命周期函数就会被执行。换一种说法,如果这个组件第一次存在与父组件中,不会执行如果这个组件之前已经存在父组件中,才会执行。
    • shouldComponentUpdate()
      组件被更新之前会会自动执行
    • componentWillUpdate()
      组件被更新之前,它会自动执行,但是它在shouldComponentUpdate ()之后被执行。如果shouldComponentUpdate ()return true,这个函数才会被执行;如果shouldComponentUpdate ()return false,这个函数就不会被执行了.
    • componentDidUpdate()
      组件更新完成之后会自动执行
    • componentWillUnmount()
      当这个组件即将被从页面中剔除的时候

    生命周期函数的使用场景

    1.在子组件里面使用shouldComponentUpdate(),避免无谓render函数的渲染
        首先我们看一下下面这种情况,当不在生命周期函数里面做任何处理的话。在父组件todoList的input中输入文字时,子组件todoItem也会跟着渲染。
        但是理想的情况下,todoItem应该只有在点击提交按钮或者删除的时候子组件todoItem才会渲染。

    组件-未处理.gif

        当传入的内容发生改变时return true,才进行渲染,当内容不发生改变的情况下return false,不对todoItem进行渲染。

     shouldComponentUpdate (nextProps, nextState) {
            // console.log('child shouldComponentUpdate')
            if (nextProps.content !== this.props.content) {
                return true
            } else {
                return false
            }
        }
    

    效果就变成了了下面这样的情况。提升了性能,避免无谓render函数的渲染

    组件-已处理.gif

    2.建议将ajax放在componentDidMount() 中执行。
        如果在将ajax放在render()中会出现死循环。只要页面的props或者state改变,render()就会被反复执行,ajax就会反复请求。
         写网页的时候,把ajax放在componentWillMount()是没有任何问题的,但是如果开发react Native,或者用react Native做服务器的同构,如果在componentWillMount()发送ajax请求,可能会和更高端的技术产生冲突。为了避免这种情况,干脆将ajax放在componentDidMount() 中。

    (完)

    相关文章

      网友评论

        本文标题:【学习笔记 】React ④ 生命周期以及使用场景

        本文链接:https://www.haomeiwen.com/subject/glvhgctx.html