实例讲解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 相关文章推荐
Ucren Virtual Desktop V2.0
Nov 07 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
Feb 07 Javascript
js表单提交和submit提交的区别实例分析
Dec 10 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
Jan 08 Javascript
JavaScript获取对象在页面中位置坐标的方法
Feb 03 Javascript
JS全局变量和局部变量最新解析
Jun 24 Javascript
ES6学习笔记之Set和Map数据结构详解
Apr 07 Javascript
node中modules.exports与exports导出的区别
Jun 08 Javascript
layUI实现前端分页和后端分页
Jul 27 Javascript
JS数组方法join()用法实例分析
Jan 18 Javascript
详解Vue中Axios封装API接口的思路及方法
Oct 10 Javascript
原生JS实现弹幕效果的简单操作指南
Nov 10 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
深入了解php4(1)--回到未来
2006/10/09 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
如何在PHP中使用数组
2020/06/09 PHP
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
[01:21]DOTA2周边文化主题展 神秘商店火热开售
2017/07/30 DOTA
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
Python有序查找算法之二分法实例分析
2017/12/11 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python中的类与类型示例详解
2019/07/10 Python
django使用xadmin的全局配置详解
2019/11/15 Python
python、Matlab求定积分的实现
2019/11/20 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
Opencv求取连通区域重心实例
2020/06/04 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
Python 串口通信的实现
2020/09/29 Python
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
建筑工程专业学生的自我评价
2013/12/25 职场文书
应用艺术专业个人的自我评价
2014/01/03 职场文书
环卫工人节活动总结
2014/08/29 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
水电施工员岗位职责
2015/04/11 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android