实例讲解React 组件生命周期


Posted in Javascript onJuly 08, 2020

在本章节中我们将讨论 React 组件的生命周期。

组件的生命周期可分成三个状态:

  • Mounting:已插入真实 DOM
  • Updating:正在被重新渲染
  • Unmounting:已移出真实 DOM

生命周期的方法有:

  • componentWillMount 在渲染前调用,在客户端也在服务端。
  • componentDidMount : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异步操作阻塞UI)。
  • componentWillReceiveProps 在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用。
  • shouldComponentUpdate 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。可以在你确认不需要更新组件时使用。
  • componentWillUpdate在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。
  • componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。
  • componentWillUnmount在组件从 DOM 中移除之前立刻被调用。

这些方法的详细说明,可以参考官方文档。

实例

以下实例在 Hello 组件加载以后,通过 componentDidMount 方法设置一个定时器,每隔100毫秒重新设置组件的透明度,并重新渲染:

class Hello extends React.Component {
 
 constructor(props) {
   super(props);
   this.state = {opacity: 1.0};
 }
 
 componentDidMount() {
  this.timer = setInterval(function () {
   var opacity = this.state.opacity;
   opacity -= .05;
   if (opacity < 0.1) {
    opacity = 1.0;
   }
   this.setState({
    opacity: opacity
   });
  }.bind(this), 100);
 }
 
 render () {
  return (
   <div style={{opacity: this.state.opacity}}>
    Hello {this.props.name}
   </div>
  );
 }
}
 
ReactDOM.render(
 <Hello name="world"/>,
 document.body
);

运行结果

实例讲解React 组件生命周期

以下实例初始化 state , setNewnumber 用于更新 state。所有生命周期在 Content 组件中。

class Button extends React.Component {
 constructor(props) {
   super(props);
   this.state = {data: 0};
   this.setNewNumber = this.setNewNumber.bind(this);
 }
 
 setNewNumber() {
  this.setState({data: this.state.data + 1})
 }
 render() {
   return (
     <div>
      <button onClick = {this.setNewNumber}>INCREMENT</button>
      <Content myNumber = {this.state.data}></Content>
     </div>
   );
  }
}
 
 
class Content extends React.Component {
 componentWillMount() {
   console.log('Component WILL MOUNT!')
 }
 componentDidMount() {
    console.log('Component DID MOUNT!')
 }
 componentWillReceiveProps(newProps) {
    console.log('Component WILL RECEIVE PROPS!')
 }
 shouldComponentUpdate(newProps, newState) {
    return true;
 }
 componentWillUpdate(nextProps, nextState) {
    console.log('Component WILL UPDATE!');
 }
 componentDidUpdate(prevProps, prevState) {
    console.log('Component DID UPDATE!')
 }
 componentWillUnmount() {
     console.log('Component WILL UNMOUNT!')
 }
 
  render() {
   return (
    <div>
     <h3>{this.props.myNumber}</h3>
    </div>
   );
  }
}
ReactDOM.render(
  <div>
   <Button />
  </div>,
 document.getElementById('example')
);

运行结果

实例讲解React 组件生命周期

以上就是实例讲解React 组件生命周期的详细内容,更多关于React 组件生命周期的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
jquery插件 autoComboBox 下拉框
Dec 22 Javascript
修改好的jquery滚动字幕效果实现代码
Jun 22 Javascript
浅析JavaScript原型继承的陷阱
Dec 03 Javascript
javascript中字符串的定义示例代码
Dec 19 Javascript
Ajax提交与传统表单提交的区别说明
Feb 07 Javascript
Node.js和MongoDB实现简单日志分析系统
Apr 25 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
Sep 16 Javascript
AngularJS监听路由的变化示例代码
Sep 23 Javascript
原生js实现无缝轮播图效果
Jan 11 Javascript
JavaScript实现图片拖曳效果
Sep 08 Javascript
原生js实现的观察者和订阅者模式简单示例
Apr 18 Javascript
在 HTML 页面中使用 React的场景分析
Jan 18 Javascript
详细分析React 表单与事件
Jul 08 #Javascript
详解JavaScript之ES5的继承
Jul 08 #Javascript
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 #jQuery
微信小程序拖拽排序列表的示例代码
Jul 08 #Javascript
基于javascript canvas实现五子棋游戏
Jul 08 #Javascript
深度解读vue-resize的具体用法
Jul 08 #Javascript
详解React 条件渲染
Jul 08 #Javascript
You might like
php 字符串函数收集
2010/03/29 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
python实现根据月份和日期得到星座的方法
2015/03/27 Python
对numpy中轴与维度的理解
2018/04/18 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
Django中信号signals的简单使用方法
2019/07/04 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
flask开启多线程的具体方法
2020/08/02 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
电子信息专业自荐书
2014/02/04 职场文书
建筑设计专业求职自我评价
2014/03/02 职场文书
餐厅采购员岗位职责
2014/03/06 职场文书
公司停电通知
2015/04/15 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书