实例讲解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 lazyload 的重复加载错误以及修复方法
Nov 19 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
Feb 02 Javascript
javascript中hasOwnProperty() 方法使用指南
Mar 09 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
Mar 09 Javascript
详解vue 实例方法和数据
Oct 23 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
Sep 11 Javascript
微信小程序实现上传多个文件 超过10个
Mar 30 Javascript
基于vue中的scoped坑点解说
Sep 04 Javascript
详解webpack的clean-webpack-plugin插件报错
Oct 16 Javascript
vue3中provide && inject的使用
Jul 01 Vue.js
vue/cli 配置动态代理无需重启服务的方法
May 20 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
Terran建筑一览
2020/03/14 星际争霸
php多重接口的实现方法
2015/06/20 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
canvas绘制多边形
2017/02/24 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
实现vuex原理的示例
2020/10/21 Javascript
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
Python 字符串操作方法大全
2014/03/11 Python
怎样使用Python脚本日志功能
2016/08/14 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
Python序列化pickle模块使用详解
2020/03/05 Python
土木工程应届生求职信
2013/10/31 职场文书
户外拓展活动方案
2014/02/11 职场文书
关于抽烟的检讨书
2014/02/25 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
投资合作意向书范本
2015/05/08 职场文书
KTV员工管理制度
2015/08/06 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
Python办公自动化PPT批量转换操作
2021/09/15 Python
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js
win10更新失败无限重启解决方法
2022/04/19 数码科技