微信小程序开发交流qq群   173683895

   承接微信小程序开发。扫码加微信。

一:组件的生命周期

组件的生命周期可分成三个状态:

  • 安装:已插入真实DOM
  • 更新:正在被重新渲染
  • 卸载:已移出真实DOM

生命周期的方法有:

  • componentWillMount在渲染前调用,在客户端也在服务端。

  • componentDidMount:在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout,setInterval或者发送AJAX请求等操作(防止异步操作阻塞UI)。

  • componentWillReceiveProps在组件接收到一个新的prop(更新后)时被调用。这个方法在初始化渲染时不会被调用。

  • shouldComponentUpdate返回一个布尔值。在组件接收到新的道具或者状态时被调用。在初始化时或者使用forceUpdate时不被调用。 
    可以在你确认不需要更新组件时使用。

  • componentWillUpdate在组件接收到新的道具或者状态但还没有渲染时被调用。在初始化时不会被调用。

  • componentDidUpdate在组件完成更新后立即调用。在初始化时不会被调用。

  • componentWillUnmount在组件从DOM中移除之前立刻被调用。

二:React 的State

1.State是什么?

State是组件的数据。

2.为什么要有State?

如果没有Stare,那么每次更新组件内的数据都需要重新执行ReactDOM.render()渲染;

3.State作用是什么?

学过前端的应该都知道ajax,在React里面,State就是充当着异步渲染节点的作用,

下面举三个例子:(会自动走动的时钟)

示例1:没有State的时钟代码实现:

function Clock(props){return(<div>{props.date.toLocaleTimeString()}</div>);
}
setInterval(()=>{ReactDOM.render(<Clock date={new Date()}/>,document.getElementById('root'));
},1000)

代码说明:每次更新时钟都需要重新渲染ReactDOM.render();

示例二:有State的时钟代码实现:(设计到的东西稍微有点多,所以会加详细注释)

class Clock extends React.Component{
// 创建一个派生类(Clock)继承 React 的 Component 组件类。constructor(props){// 调用父类的构造函数, 并将 Component 的 props 提供给 Clock 的"props"。super(props);// 注意: 在派生类中, 必须先调用 super() 才能使用 "this"。this.state = {date:new Date()};//给派生组件类的state申明一个date属性。}componentDidMount(){//它是一个生命周期钩子函数,在第一次渲染后调用。this.timerID = setInterval(()=>{//给当前组件对象添加一个timerID属性(方便清空的时候调用当前函数),每过一秒就重新给state内的date重新赋值this.setState({date:new Date()})},1000);}componentWillUnmount(){//它是一个生命周期钩子函数,在组件从DOM中移除之前立刻被调用。clearInterval(this.timerID);//清空当前组件 timerID 属性的 clearInterval 循环,停止计时器。}render(){return(<div>{this.state.date.toLocaleTimeString()}</div>);}
}ReactDOM.render(<Clock />,document.getElementById('root'));

代码说明:通过修改组件的state达到实时渲染组件但是只需要执行一次ReactDOM渲染的目的。

示例1和示例2的效果图:

注意事项:state更新可能是异步的,所以不能依赖它们的值来进行计算:

错误示例:

this.setState({data:this.state.data + this.props.num
})

正确示例:(使用setState接受函数,将组件本身的state作为第一个参数,将更新作为第二个参数)

this.setState((state,props)=>({data: state.data + props.num
}));

示例3:在自定义组件里面镶入state ,再次强调,自定义组件开头字母必须大写

function MyDate(props){return <div>{props.date.toLocaleTimeString()}</div>;
}
class Clock extends React.Component{constructor(props){super(props);this.state = {date:new Date()};}componentDidMount(){this.timerID = setInterval(()=>this.tick(),1000);}componentWillUnmount(){clearInterval(this.timerID);}tick(){this.setState({date:new Date()});}render(){return(<div><h1>hello</h1><MyDate date={this.state.date}/></div>);}
}
ReactDOM.render(<Clock />,document.getElementById('root')
);

运行效果图:

React State和生命周期 3相关推荐

  1. React文档(六)state和生命周期

    想一下之前的章节时钟的例子. 目前为止我们只学习了一直方式去更新UI. 我们调用ReactDOM.render()方法去改变渲染的输出: function tick() {const element ...

  2. jsonp react 获取返回值_谈谈对 React 新旧生命周期的理解

    前言 在写这篇文章的时候,React 已经出了 17.0.1 版本了,虽说还来讨论目前 React 新旧生命周期有点晚了,React 两个新生命周期虽然出了很久,但实际开发我却没有用过,因为 Reac ...

  3. React的组件生命周期

    1. 挂载卸载过程 1.1.constructor() 1.2.componentWillMount() 1.3.componentDidMount() 1.4.componentWillUnmoun ...

  4. React学习:生命周期、过滤器、event、axios-学习笔记

    文章目录 React学习:生命周期.过滤器.event.axios-学习笔记 生命周期 过滤器 webapp小例子: event - 和原生JavaScript写法一样的 axios React学习: ...

  5. React 初探 [五] React 组件的生命周期

    说起生命周期,最先接触的是Andorid 开发中 Activity 和 Fragment 的生命周期,再者是Vue 组件,那么今天要梳理的是React 组件的生命周期,可见对生命周期的理解和掌握对组件 ...

  6. React 组件的生命周期

    目录 前言 一.React 实例的生命周期及其与 Hooks 的映射 1.旧的生命周期图 2.新的生命周期图 3.新旧生命周期及其与 Hooks 的映射表 二.部分生命周期详解 1.getDerive ...

  7. React组件的生命周期

    react组件的生命周期 文章目录 react组件的生命周期 总览 挂载时 更新时 卸载时 被移除的生命周期 总览 React的生命周期大体可以分为三个部分,一,挂载阶段:二更新阶段三,卸载阶段 挂载 ...

  8. React:新旧生命周期及其对比

    文章目录 概述 生命周期(旧) 挂载时 更新时 父组件render setState forceUpdate 卸载时 生命周期(新) 挂载时 更新时 卸载时 新旧生命周期的对比 概述 不管是vue还是 ...

  9. Flutter State 的生命周期

    本文主要介绍类比 Android 和 iOS,了解 Flutter State 的生命周期. 从 Android 或 iOS 转到 Flutter 开发,最让人疑惑的是 Flutter 如何处理生命周 ...

最新文章

  1. 机器视觉之医学诊断应用
  2. 虚拟方法及抽象方法在使用上的区别
  3. 我学Delphi心得及笔记----字符串操作(第六讲)
  4. android.content.Context.getResources()‘ on a null object reference
  5. 六十八、SpringBoot连接MongoDB操作
  6. 电源开关上的 | 和 O 究竟代表了什么?
  7. 让未备案的网站先飙起来
  8. Java 8:开发人员怎么看?
  9. 【Web API系列教程】3.3 — 实战:处理数据(建立数据库)
  10. 联邦知识蒸馏概述与思考(续)
  11. 内核中dump_stack的实现原理(3) —— 内核函数printk的实现
  12. linux运行win7,Windows7 上运行docker实战
  13. unity3d面试题
  14. 苹果系统与win10连接到服务器,苹果手机怎么连接win10电脑详细步骤
  15. 加好友饥荒服务器没有响应,饥荒进不去别人的服务器 | 手游网游页游攻略大全...
  16. 蘑菇丁周记范文计算机销售40篇,毕业生实习周记及销售实习周记范文 毕业生蘑菇钉周记范文(最新)...
  17. DDD.实践思考随笔,看书不在所而在于自己有多少思考
  18. [转] 全套汽车标志,好不容易找到的哦!
  19. c语言中的less函数,less的小白入门介绍
  20. 使用VGG模型自定义图像分类任务

热门文章

  1. 【php】 PHP 支持 9 种原始数据类型
  2. 写扩展性好的代码:函数
  3. 不同命名空间的对象二进制反序列化问题
  4. H5面试题---介绍js的基本数据类型
  5. 减少Building 'Xxx' Gradle project info等待时间
  6. 在Windows7 下 mingw32 开发环境中采用 glut3.7 学习 OpenGL
  7. Android -- DrawerLayout
  8. 深入理解PHP原理之变量(Variables inside PHP)
  9. 用thttpd做Web Server
  10. WMI技术介绍和应用——VC开发WMI应用的基本步骤