react 生命周期实例分析


Posted in Javascript onMay 18, 2020

本文实例讲述了react 生命周期。分享给大家供大家参考,具体如下:

组件挂载:

componentWillMount(组件将要挂载到页面)->render(组件挂载中)->componentDidMount(组件挂载完成后)

组件更新:

1、shouldComponentUpdate(render之前执行,参数为ture时执行render,为false时不执行render)

componentWillUpdate(shouldComponentUpdate之后执行)

componentDidUpdate(render之后执行)

顺序:shouldComponentUpdate-》componentWillUpdate-》render-》componentDidUpdate

import React, { Component, Fragment } from 'react';
import List from './List.js';
 
class Test extends Component {
  constructor(props) {
    super(props);
    this.state={
      inputValue:'aaa',
      list:['睡觉','打游戏'],
    }
    // this.add=this.add.bind(this);
  }
 
  addList() {
    this.setState({
      list:[...this.state.list,this.state.inputValue],
      inputValue:''
    })
  }
 
  change(e) {
    this.setState({
      // inputValue:e.target.value
      inputValue:this.input.value
    })
  }
 
  delete(i) {
    // console.log(i);
    const list = this.state.list;
    list.splice(i,1);
    this.setState({
      list:list
    })
  }
 
  //组件将要挂载到页面时
  componentWillMount() {
    console.log('componentWillMount');
  }
 
  //组件完成挂载后
  componentDidMount() {
    console.log('componentDidMount');
  }
 
  //组件被修改之前,参数为ture时执行render,为false时不往后执行
  shouldComponentUpdate() {
    console.log('1-shouldComponentUpdate');
    return true;
  }
 
  //shouldComponentUpdate之后  
  componentWillUpdate() {
    console.log('2-componentWillUpdate');
  }
 
  //render执行之后
  componentDidUpdate() {
    console.log('4-componentDidUpdate');
  }
 
 
  //组件挂载中
  render() { 
    console.log('3-render');
    return (
      <Fragment>
      <div>
        <input ref={(input)=>{this.input=input}} value={this.state.inputValue} onChange={this.change.bind(this)}/>
        <button onClick={this.addList.bind(this)}>添加</button>
      </div>
      <ul>
        {
          this.state.list.map((v,i)=>{
            return(
                <List key={i} content={v} index={i} delete={this.delete.bind(this)} />
            );
          })
        }
      </ul>
      </Fragment>
    );
  }
}
 
export default Test;

2、componentWillReceiveProps(子组件中执行。组件第一次存在于虚拟dom中,函数不会被执行,如果已经存在于dom中,函数才会执行)

componentWillUnmount(子组件在被删除时执行)

import React, { Component } from 'react';
import PropTypes from 'prop-types';
 
class List extends Component {
  constructor(props) {
    super(props);
    this.delete = this.delete.bind(this);
  }
  
  //组件第一次存在于虚拟dom中,函数不会被执行
  //如果已经存在于dom中,函数才会执行
  componentWillReceiveProps() {
    console.log('componentWillReceiveProps');
  }
 
  //子组件被删除时执行
  componentWillUnmount() {
    console.log('componentWillUnmount');
  }
 
  render() { 
    return (
    <li
    onClick={this.delete}>{this.props.name}{this.props.content}</li>
    );
  }
 
  delete=() => {
    this.props.delete(this.props.index);
  }
}
 
List.propTypes={
  name:PropTypes.string.isRequired,
  content:PropTypes.string,
  index:PropTypes.number,
  delete:PropTypes.func
}
 
//设置默认值:
 
List.defaultProps={
  name:'喜欢'
}
 
export default List;

组件性能优化:

import React, { Component } from 'react';
import PropTypes from 'prop-types';
 
class List extends Component {
  constructor(props) {
    super(props);
    this.delete = this.delete.bind(this);
  }
  
  //组件第一次存在于虚拟dom中,函数不会被执行
  //如果已经存在于dom中,函数才会执行
  componentWillReceiveProps() {
    console.log('componentWillReceiveProps');
  }
 
  //子组件被删除时执行
  componentWillUnmount() {
    console.log('componentWillUnmount');
  }
 
  shouldComponentUpdate(nextProps,nextState) {
    if (nextProps.content !== this.props.content) {
      return true;
    } else {
      return false;
    }
  }
 
  render() { 
    return (
    <li
    onClick={this.delete}>{this.props.name}{this.props.content}</li>
    );
  }
 
  delete=() => {
    this.props.delete(this.props.index);
  }
}
 
List.propTypes={
  name:PropTypes.string.isRequired,
  content:PropTypes.string,
  index:PropTypes.number,
  delete:PropTypes.func
}
 
//设置默认值:
 
List.defaultProps={
  name:'喜欢'
}
 
export default List;

希望本文所述对大家react程序设计有所帮助。

Javascript 相关文章推荐
js 蒙版进度条(结合图片)
Mar 10 Javascript
早该知道的7个JavaScript技巧
Mar 27 Javascript
js采用map取到id集合组并且实现点击一行选中一行
Dec 16 Javascript
JavaScript的各种常见函数定义方法
Sep 16 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
Oct 24 Javascript
jQuery如何跳转到另一个网页 就这么简单
Dec 28 Javascript
微信小程序实现实时圆形进度条的方法示例
Feb 24 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
Apr 28 Javascript
layui 表格的属性的显示转换方法
Aug 14 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
Jun 17 Javascript
对vuex中getters计算过滤操作详解
Nov 06 Javascript
vue+element导航栏高亮显示的解决方式
Nov 12 Javascript
react使用CSS实现react动画功能示例
May 18 #Javascript
Node.js API详解之 net模块实例分析
May 18 #Javascript
Javascript实现简易天数计算器
May 18 #Javascript
微信小程序开发打开另一个小程序的实现方法
May 17 #Javascript
微信小程序开发之获取用户手机号码(php接口解密)
May 17 #Javascript
关于AngularJS中几种Providers的区别总结
May 17 #Javascript
VueCli4项目配置反向代理proxy的方法步骤
May 17 #Javascript
You might like
ip签名探针
2006/10/09 PHP
mysql建立外键
2006/11/25 PHP
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
jquery创建div 实现代码
2009/04/27 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
JS实现“全选”和&quot;全不选&quot;功能代码实例
2020/02/06 Javascript
vue实现信息管理系统
2020/05/30 Javascript
python基础教程之数字处理(math)模块详解
2014/03/25 Python
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
Django 框架模型操作入门教程
2019/11/05 Python
Python中有几个关键字
2020/06/04 Python
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
钓鱼岛事件感想
2015/08/11 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
小学语文继续教育研修日志
2015/11/13 职场文书
《比尾巴》教学反思
2016/02/24 职场文书