实例讲解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 相关文章推荐
Prototype 工具函数 学习
Jul 23 Javascript
javascript中的new使用
Mar 20 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
Apr 01 Javascript
javascript匿名函数应用示例介绍
Mar 07 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
Dec 21 Javascript
js 数据存储和DOM编程
Feb 09 Javascript
vue实现的双向数据绑定操作示例
Dec 04 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
Jan 07 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
Apr 11 Javascript
解决Vue打包上线之后部分CSS不生效的问题
Nov 12 Javascript
JavaScript 闭包的使用场景
Sep 17 Javascript
vue 判断页面是首次进入还是再次刷新的实例
Nov 05 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
基于mysql的论坛(3)
2006/10/09 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
JS实现的生成随机数的4个函数分享
2015/02/11 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
node.js使用stream模块实现自定义流示例
2020/02/13 Javascript
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
详解python itertools功能
2020/02/07 Python
python中with用法讲解
2020/02/07 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
学子宴答谢词
2014/01/25 职场文书
策划总监岗位职责
2014/02/16 职场文书
法语专业求职信
2014/07/20 职场文书
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android
Pillow图像处理库安装及使用
2022/04/12 Python