实例讲解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拖拽上传 [一个拖拽上传修改头像的流程]
Jul 13 Javascript
ECMAScript 创建自己的js类库
Nov 22 Javascript
javascript通过元素id和name直接取得元素的方法
Apr 28 Javascript
JS去除空格和换行的正则表达式(推荐)
Jun 14 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
Jul 28 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
Aug 11 Javascript
react native带索引的城市列表组件的实例代码
Aug 08 Javascript
Express的HTTP重定向到HTTPS的方法
Jun 06 Javascript
JS实现面向对象继承的5种方式分析
Jul 21 Javascript
JS如何获取地址栏的参数实例讲解
Oct 06 Javascript
JavaScript模板引擎原理与用法详解
Dec 24 Javascript
vue3.0 加载json的方法(非ajax)
Oct 26 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安装攻略:常见问题解答(一)
2006/10/09 PHP
php 无限级缓存的类的扩展
2009/03/16 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
python创建临时文件夹的方法
2015/07/06 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
2014年应届大学生自我评价
2014/01/09 职场文书
平安工地建设方案
2014/05/06 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
同学会感言
2015/07/30 职场文书
环保建议书作文500字
2015/09/14 职场文书
mysql优化
2021/04/06 MySQL
python 标准库原理与用法详解之os.path篇
2021/10/24 Python
Nginx 常用配置
2022/05/15 Servers