所有生命周期的详细应用

我又来了。
这次来一波完整的。
代码效果是一个按钮,点击一次数字增加1,很普通的效果,只是别忘了打开控制台,看生命周期的变化。这个才是亮点。

import React, { Component } from 'react';
// 封装组件
class Hellow extends React.Component{
    constructor(props){
        super(props);
        // 设置初始data为0
        this.state = {data:0};
        // 为事件函数绑定this
        this.setNewNumber = this.setNewNumber.bind(this)
    }
    // 事件
    setNewNumber(){
        // 设置 setState   将当前最新的 data 赋值给data
        this.setState({data:this.state.data +1})
    }



    render(){
        return(
            <div>
                {/* 绑定点击事件 */}
                <button onClick={this.setNewNumber}>增加</button>
                {/* 嵌套组件 将最新的 data 赋值给myNumber */}
                <Content myNumber = {this.state.data}/>
            </div>
        );
    }
}


class Content extends React.Component{
    // 初始化调用
    componentWillMount(){
        console.log("初始化渲染调用")
    }
    // 组件渲染之后调用
    componentDidmount(){
        console.log('组件渲染之后调用,只调用一次')
    }
    // 父级更新时调用
    componentWillReceiveProps(){
        console.log('初始化时不调用,组件接收新的props说明父级更新,此时调用')
    }
    // 组件收到新的state或者props时调用
    shouldComponentUpdate(newProps,newState){
        console.log('我是用来做性能优化的,组件接收新的state或者props时调用,我显示是因为有更新')
        return true;
    }
    // 组件更新时调用
    componentWillUpdate(nexProps,nexState){
        console.log('初始化时不调用,只在组件将要更新时才调用,此时可以修改state')
    }
    // 更新完成后调用
    componentDidUpdate(prevProps,prevState){
        console.log('组件初始化时不调用,更新完成后才调用,这时可以获取DOM节点')
    }
    // 组件卸载时调用
    componentWillUnmount(){
        console.log('组件卸载时调用,此时清除事件监听和定时器')
    }
    render(){
        return(
            <div>
                {/* 设置显示当前的myNumber */}
                <h3>{this.props.myNumber}</h3>
            </div>
        )
    }

}


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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,554评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 13,126评论 2 59
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,031评论 3 119
  • 从17末的圣诞帽到晒18岁,再从18年的网易云音乐盘点H5到今天的支付宝年度账单,这一周多来整个朋友圈真的很热闹,...
    歪歪不倒阅读 596评论 0 0
  • 想起那个以民为乐的醉翁。他就像一个很可爱的老爷爷,自得其乐。饮少辄醉,颓然乎其间,每天看似无忧无虑,但心怀国家,...
    杨YTM_阅读 585评论 0 0