美文网首页
React的生命周期函数

React的生命周期函数

作者: 泡杯感冒灵 | 来源:发表于2022-03-17 16:35 被阅读0次
生命周期函数指在某一个时刻组件会自动调用执行的函数。
对一个React组件来说,它会经历一些过程,看下图。
  • Initialization 组件的初始化过程,组件会初始化自己的一些数据,比如props,比如state,那么组件在哪里做的初始化呢? 是在constructor函数就是我们初始化的位置,我们在这里定义state,接收props。
  • 初始化之后,组件要被渲染然后挂载到页面上,这个过程就是Mounting,组件被挂载到页面的过程会经历3个周期。注意:componentWillMount和componentDidMount只有在组件第一次挂载的时候,会被执行,后边数据变化的时候,只执行render生命周期。
// 在组件即将被挂载到页面的时刻自动执行,还没有被挂载。
    componentWillMount(){
        console.log('componentWillMount');
    }

// render函数做页面的挂载
    render(){
        console.log('render');
        return (
            <Fragment>
                <div>
                    {/*这是一种注释方式,下边是一个input框*/}
                    {
                        // 这是一个单行注释,之所以花括号要单独一行,就是避免被当成注释内容
                    }
                    <label htmlFor="inserArea">输入内容</label>
                    <input
                        id="inserArea"
                        className="input"
                        value={this.state.inputValue}
                        onChange={this.handleInputChange}
                        ref={(input) => {this.input = input}}
                    />
                    <button onClick={this.handleBtnCick}>提交</button>
                </div>
                <ul ref={(ul) => {this.ul = ul}}>
                    {this.getTodoItem()}
                </ul>
            </Fragment>
        )
    }

    // 组件被挂载到页面之后,自动被执行。
    componentDidMount(){
        console.log('componentDidMount')
    }
  • Updation组件更新流程。要么是props,要么是state发生变化,也就是数据发生变化的时候,页面的更新会被执行。props和state发生变化时,执行的生命周期函数有相同的,也有不同的。
    相同的,shouldComponentUpdate(组件是否要被更新),这个函数需要返回布尔值,true就是需要更新,false就是不需要更新,后边的生命周期都不会执行了。componentWillUpdate、render、componentDidUpdate
    不同的,componentWillReceiveProps
    // 组件被更新之前,它会自动被执行。
    shouldComponentUpdate(){
        console.log('shouldComponentUpdate');
        return true;
    }

    // 组件被更新之前,它会自动被执行,但是它在shouldComponentUpdate之后执行
    // 如果shouldComponentUpdate返回true,componentWillUpdate才会执行
    // 如果shouldComponentUpdate返回false,componentWillUpdate不会被执行
    componentWillUpdate(){
        console.log('componentWillUpdate');
    }

    // 组件更新完成以后,它会被执行
    componentDidUpdate(){
        console.log('componentDidUpdate');
    }

    // 当一个组件要从父组件接收参数
    // 只要父组件的render函数被重新执行了,子组件的这个生命周期函数就会被执行
    // 如果这个组件第一次存在于父组件中,不会执行
    // 如果这个组件之前已经存在于父组件中,才会执行。
    componentWillReceiveProps(){
        console.log('child componentWillReceiveProps');
    }
  • Unmounting把组件从页面上去除的过程。
    // 当这个组件,即将被从页面中剔除的时候,会被执行。
    componentWillUnmount(){
        console.log('child componentWillUnmount');
    }
注意,react组件中,其他生命周期函数都可以不存在,唯有render必须要有,是因为创建组件的时候,继承了React.Component这个组件,这个组件默认内置了其他生命周期函数的默认实现,唯独没有内置render生命周期函数的默认实现。所以,render函数必须要自己实现。

React生命周期函数的使用场景
  • 首先要知道,只有当一个组件的state或者props发生改变的时候,render函数才会重新执行;对一个组件来说,当这个组件的父组件的render函数重新执行的时候,父组件里的子组件的render函数,也会重新执行。这个逻辑上虽然是没错的,但是会带来性能上的损耗,因为如果子组件接收的props没变化(没必要重新渲染),只是父组件的数据发生了变化,从而导致子组件的render函数重新执行,的确是损耗了性能,那该怎么去做性能优化呢?这个时候就需要用到生命周期函数了。
    // 子组件里设置这个钩子函数(返回false)。
    // 意思就是,这个子组件被渲染一次之后,如果子组件需要更新,那么强制要求不更新。
    shouldComponentUpdate(){
        return false;
    }
    
    // 最优写法,加两个参数。
    // nextProps 指的是,当组件要被更新的时候,组件的props要被更新成什么样
    // nextState 指的是,当组件要被更新的时候,组件的state要被更新成什么样
    shouldComponentUpdate(nextProps, nextState){
        // 接下来props里的content如果不等于当前props里的content,
        // 说明组件接收的props里的content的值发生了变化,需要让组件重新渲染。
        // 否则就是content的值没有发生变化,就不需要组件重新渲染
        if(nextProps.content !== this.props.content){
            return true;
        }else{
            return false;
        }
    }
  

这样,我们就通过shouldComponentUpdate这个生命周期函数提升了组件的性能。避免组件做无谓的render操作(render函数重新执行,就意味着react底层需要对组件生成一份虚拟DOM,与原来的虚拟DOM做比对,这个比对也是需要消耗一定的性能的)

一般情况下,我们把ajax请求,放在componentDidMount生命周期里,因为在react里,componentDidMount函数,只会被执行一次。之所以不方在render生命周期函数里,是因为随着组件数据的变化,render函数会重复执行,那么ajax就会重复请求,肯定是不合适的。至于componentWillMount其实也可以用来请求ajax,因为它也是只执行一次,但是当我们写ReactNative或者做服务器端的重构等更深技术的时候,可能会和一些更高端的技术产生冲突,为了避免这种可能存在的冲突,就干脆写到componentDidMount里。当然了,ajax也可以放在constructor里,但是不建议。
  • 在react里发送ajax请求,可以借助axios,需要先安装。

相关文章

  • RN-生命周期函数(新)

    旧版生命周期函数 react 16.4 以后生命周期函数 http://projects.wojtekmaj.pl...

  • React 生命周期函数

    https://reactjs.org/docs/react-component.html React生命周期函数...

  • React的生命周期函数

    一、生命周期函数的定义 在某个时刻自动被调用的函数是生命周期函数 二、React中生命周期函数示意图 三、生命周期...

  • 04.React高级部分(中)

    React的生命周期函数 React生命周期函数的使用场景 这一小节,我们来做两个生命周期相关的常用操作1.如何避...

  • useState

    react-hooks 如果你熟悉 React class 的生命周期函数,你可以把 useEffect Hook...

  • 四:React 进阶三 (生命周期)

    react(一):组件的生命周期 生命周期函数 在组件运行的某个时刻,会被自动执行的一些函数。 React生命周期...

  • React快速上手5-react中的事件和生命周期函数

    这节中我们将主要介绍react应用中的事件和生命周期函数 React事件 在react中,我们不用addEvent...

  • 2020-09-11

    REACT生命周期 (JS胖老师课程 ) 生命周期函数指在某一个时刻组件会自动调用执行的函数 REACT生命周期的...

  • React 生命周期

    React 16.4 的生命周期图 早期React生命周期图 从图中,我们看到了一些变化 废弃的三个生命周期函数 ...

  • react生命周期函数

    react 生命周期函数介绍[https://www.cnblogs.com/kdcg/p/9182393.htm...

网友评论

      本文标题:React的生命周期函数

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