美文网首页
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概念图

    React概念图 React组件生命周期概念图 参考文档:React入门教程 组件生命周期React:组件生命周期...

  • React基础篇之组件的生命周期

    引出生命周期 react生命周期(旧) react生命周期(新) getSnapshotBeforeUpdate的...

  • React生命周期

    React v16.0前的生命周期 React v16.4+ 的生命周期图 React v16.9后这些生命周期钩...

  • React v16 生命周期

    React 16 生命周期 React 16.3 新增的生命周期方法 逐渐废弃的生命周期方法: 一般将生命周期分成...

  • 学习并实现react (4)

    实现生命周期 生命周期介绍 React 生命周期图 React 子组件在父组件下的生命周期流程 实现 compon...

  • React面试题 整理脑图

    react基础 React生命周期 react-router react进阶 react Hooks redux 其他

  • react/vue常见问题整理

    一、react 1. react生命周期 react 16生命周期相对于15的变化:componentWillMo...

  • React 组件生命周期

    组件生命周期 参考阅读: component-lifecycle react组件生命周期过程说明 react 组件...

  • 《深入React技术栈》学习笔记Ⅲ

    以下的生命周期都是在 React 15 的生命周期, React 16 的生命周期 API 已经发生变化。Reac...

  • React总结

    [toc] 1.React组件生命周期 1.1 生命周期图 组件的生命周期的图如下: 具体可参考React 组件生...

网友评论

      本文标题:React 生命周期

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