美文网首页
React 生命周期

React 生命周期

作者: SingleDiego | 来源:发表于2019-02-12 16:03 被阅读3次

    参考原文:
    https://juejin.im/post/5a062fb551882535cd4a4ce3
    https://react.docschina.org/docs/state-and-lifecycle.html

    React 生命周期图示

    如图,React 生命周期主要包括三个阶段:

    • 初始化阶段
    • 运行中阶段
    • 销毁阶段

    在 React 不同的生命周期里,会依次触发不同的钩子函数,下面我们就来详细介绍一下 React 的生命周期函数。




    一、初始化阶段

    1、设置组件的默认属性
    static defaultProps = {
        name: 'tom',
        age:23
    };
    //or
    Counter.defaltProps={name:'tom'}
    
    2、设置组件的初始化状态
    constructor() {
        super();
        this.state = {number: 0}
    }
    
    3、componentWillMount()

    组件即将被渲染到页面之前触发,此时可以进行开启定时器、向服务器发送请求等操作

    4、render()

    组件渲染

    5、componentDidMount()

    组件已经被渲染到页面中后触发,此时页面中有了真正的 DOM 的元素,可以进行 DOM 相关的操作

    二、运行中阶段

    1、componentWillReceiveProps()

    组件接收到属性时触发

    2、shouldComponentUpdate()

    当组件接收到新属性,或者组件的状态发生改变时触发。组件首次渲染时并不会触发。

    // 该钩子函数可以接收到两个参数,新的属性和状态
    // 返回 true、false 来控制组件是否需要更新
    shouldComponentUpdate(newProps, newState) {
        if (newState.number<5) {
            return true;
        } else{
            return false;
        }
    }
    
    3、componentWillUpdate()

    组件即将被更新时触发。

    4、componentDidUpdate()

    组件被更新完成后触发。页面中产生了新的 DOM 的元素,可以进行 DOM 操作

    三、销毁阶段

    1、componentWillUnmount()

    组件被销毁时触发。这里我们可以进行一些清理操作,例如清理定时器,取消 Redux 的订阅事件等等。




    下面看一个 Demo,看看一个组件的生命周期,数字表示执行顺序。点击按钮执行为 statenumber 属性 +1

    class Counter extends React.Component {
        static defaultProps = {
            //1、加载默认属性
            name: 'tom',
            age:23
        };
    
        constructor() {
            super();
            //2、加载默认状态
            this.state = {number: 0}
        }
    
        componentWillMount() {
            console.log('3、组件挂载之前');
        }
    
        componentDidMount() {
            console.log('5、组件挂载完成');
        }
    
        shouldComponentUpdate(newProps, newState) {
            console.log('6、检查组件是否需要更新');
            if (newState.number<5) {
              return true;
            } else{
              return false;
            }
        }
    
        componentWillUpdate() {
            console.log('7、组件将要更新');
        }
    
        componentDidUpdate() {
            console.log('8、组件更新完成');
        }
    
        handleClick = () => {
            this.setState({
                number: this.state.number + 1
            })
        };
    
        render() {
            console.log('4、render(组件挂载)');
            return (
                <div>
                    <p>{this.state.number}</p>
                    <button onClick={this.handleClick}>+</button>
                </div>
            )
        }
    }
    ReactDOM.render(<Counter/>, document.getElementById('root'));
    

    相关文章

      网友评论

          本文标题:React 生命周期

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