实例讲解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 相关文章推荐
JavaScript中:表达式和语句的区别[译]
Sep 17 Javascript
JS获取计算机mac地址以及IP的实现方法
Jan 08 Javascript
JS实现自动切换文字的导航效果代码
Aug 27 Javascript
javascript实现全角转半角的方法
Jan 23 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
Dec 22 Javascript
基于openlayers4实现点的扩散效果
Aug 17 Javascript
JavaScript多态与封装实例分析
Jul 27 Javascript
Vue.js组件通信之自定义事件详解
Oct 19 Javascript
vue ssr服务端渲染(小白解惑)
Nov 10 Javascript
JavaScript console的使用方法实例分析
Apr 28 Javascript
基于Vant UI框架实现时间段选择器
Dec 24 Javascript
关于Vue中的options选项
Mar 22 Vue.js
详细分析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整合PayPal支付
2015/06/11 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
Jquery 弹出层插件实现代码
2009/10/24 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
js实现点击添加一个input节点
2014/12/05 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
node文件上传功能简易实现代码
2017/06/16 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
深入Python函数编程的一些特性
2015/04/13 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
python使用建议与技巧分享(二)
2020/08/17 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例
2017/07/31 HTML / CSS
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
酒店管理专业学生求职信
2013/09/27 职场文书
党员自我对照检查材料
2014/08/19 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
鸦片战争观后感
2015/06/09 职场文书
公司车队管理制度
2015/08/04 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
React更新渲染原理深入分析
2022/12/24 Javascript