实例讲解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 相关文章推荐
拖拉表格的JS函数
Nov 20 Javascript
突发奇想的一个jquery插件
Nov 19 Javascript
javascript将数组插入到另一个数组中的代码
Jan 10 Javascript
js arguments,jcallee caller用法总结
Nov 30 Javascript
ExtJS4如何给同一个formpanel不同的url
May 02 Javascript
js键盘事件的keyCode
Jul 29 Javascript
javaScript实现滚动新闻的方法
Jul 30 Javascript
JS通过Cookie判断页面是否为首次打开
Feb 05 Javascript
setTimeout与setInterval的区别浅析
Mar 23 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
Oct 10 Javascript
koa2的中间件功能及应用示例
Mar 05 Javascript
基于JavaScript实现年月日三级联动
Jun 22 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统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
深入剖析PHP中printf()函数格式化使用
2016/05/23 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
Laravel 5.5 异常处理 &amp; 错误日志的解决
2019/10/17 PHP
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
javascript事件模型介绍
2016/05/31 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
python使用arp欺骗伪造网关的方法
2015/04/24 Python
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
Python 多线程实例详解
2017/03/25 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
Python 复平面绘图实例
2019/11/21 Python
Python利用命名空间解析XML文档
2020/08/10 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
Oracle性能调优原则
2012/05/03 面试题
房地产销售大学生自我评价分享
2013/11/11 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers