React学习笔记(五)

四、State&声明周期

可以为组件添加“状态(state)”。状态与属性相似,但是状态是私有的,完全受控于当前组件。

局部状态就是只能用于类(定义为类的组件)的一个功能。

1. 将函数转换为类

声明一个类,继承React.Component;创建一个render()方法;使用this.props替换props。

class Clock extends React.Component {
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is { this.props.date.toLocaleTimeSting() }.</h2>
</div>
)
}
}

2. 为一个类添加局部状态

使用状态,就不应该再用this.props,而是this.state。

为类添加一个构造函数来初始化state

class Clock extends React.Component {
constructor(props) {
super(props);
this.state = { date: new Date() };
} render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is { this.state.date.toLocaleTimeSting() }.</h2>
</div>
)
}
} ReactDOM.render(
<Clock />,
document.getElementById('root')
);

类组件应始终使用props调用基础构造函数。

3. 将生命周期方法添加到类中

这里提到两个生命周期钩子函数:

  • 挂载 componentDidMount 当组件输出到DOM后
  • 卸载 componentWillUnmount

通过this.setState()方法来更新组件局部状态。

class Clock extends React.Component{
constructor() {
...
} // 组件挂载 设置定时器
componentDidMount() {
this.timer = setInterval(
() => this.tick(),
1000
);
} // 组件卸载 清除定时器
componentWillUnmount() {
clearInterval(this.timer);
} tick() {
// 更新state
this.setState({
date: new Date()
});
} render() {
return ...
}
} ReactDOM.render(
<Clock />,
document.getElementById('root')
);

4. 正确地使用state

  • 不要直接更新状态;必须调用setState()方法。
  • 同时构造函数是唯一能够初始化state的地方。
  • 状态更新可能是异步的。
// 使用props和state计算下一个状态
// @param {Object} prevState 先前的状态
// @param {Object} props 此次更新被应用时的props
this.setState((prevState, props) => ({
counter: prevState.counter + props.increment
}));
  • 状态更新合并。也就是说,调用setState()时,提供的对象是合并至当前状态中。且完全替换这个状态。

5. 数据自顶向下流动(单向数据流)

状态应当只有组件本身拥有并设置它;

但组件可以将其状态作为属性传递给其子组件。也就是说,从该状态导出的任何数据或UI只能影响数中下方的组件。

这就是单向数据流。

The end... Last updated by: Jehorn, April 15, 2019, 5:20 PM

React学习笔记(五)State&声明周期的更多相关文章

  1. React学习笔记-03 state

    每一个组件都有状态,比如一个开关,开 和 关,都是一种state.那么react是怎么管理它的state的? React 把用户界面当做状态机,可以轻松的让用户界面和数据保持一致.用户只需要更新组件的 ...

  2. react学习笔记1之声明组件的两种方式

    //定义组件有两种方式,函数和类 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } class ...

  3. React学习笔记(一)- 入门笔记

    React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...

  4. react学习笔记1--基础知识

    什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...

  5. React学习笔记(七)条件渲染

    React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...

  6. React学习笔记(六)事件处理

    React学习笔记(六) 五.事件处理 React事件绑定属性的命名采用驼峰写法,不同于传统DOM全部小写. 如果采用JSX的语法,事件函数需要用大括号{}包裹函数名,不同于传统DOM字符串小括号的方 ...

  7. 【React】react学习笔记02-面向组件编程

    react学习笔记02-面向组件编程 面向组件编程,直白来说,就是定义组件,使用组件. 以下内容则简单介绍下组建的声明与使用,直接复制demo观测结果即可. 步骤: 1.定义组件   a.轻量组件-函 ...

  8. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  9. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

随机推荐

  1. python pip 安装OpenCV

    cmd pip install opencv-contrib-python -i https://pypi.mirrors.ustc.edu.cn/simple/

  2. How can I set ccshared=-fPIC while executing ./configure?

    解决方式如下: make clean ./configure CFLAGS=-fPIC CXXFLAGS=-fPIC

  3. C#中判断系统的架构(32位,还是64位)

    一种很简单的方法就是根据IntPtr类型的Size属性来判断, //IntPtr.Size在64位为8,在32位为4 public static Boolean Is64Bit() { ) retur ...

  4. hadoop开发环境

    hadoop2.6伪分布式环境安装配置以及配置eclipse开发环境 Hadoop安装教程_单机/伪分布式配_Hadoop2.6.0/Ubuntu14.04 使用Eclipse编译运行MapReduc ...

  5. TCP/IP协议的三次握手及实现原理

    TCP/IP是很多的不同的协议组成,实际上是一个协议组,TCP用户数据报表协议(也称作TCP传输控制协议,Transport Control Protocol.可靠的主机到主机层协议.这里要先强调一下 ...

  6. 响应式下的雪碧图解决方案 - 活用background-size / background-position

    一.概述 在传统的居中布局时,我们常用background-position这个属性来进行雪碧图的定位,在减少数据量的同时,保证准确定位.在移动端使用越来越重的现在,以往的传统定位,已经无法达到目的, ...

  7. 203_Removed-Linked-List-Elements

    目录 203_Removed-Linked-List-Elements Description Solution Java solution 1 Java solution 2 Python solu ...

  8. C++实现顺序查找,折半查找,插值查找

    1.顺序查找 从数组起始扫描到数组结尾,判断该索引数组是否和关键字相等,成功返回1 代码如下: //顺序查找 int seqSearch(int *array, int low, int high, ...

  9. 吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

    1.1为什么选择序列模型 (1)序列模型广泛应用于语音识别,音乐生成,情感分析,DNA序列分析,机器翻译,视频行为识别,命名实体识别等众多领域. (2)上面那些问题可以看成使用(x,y)作为训练集的监 ...

  10. SQL Serever学习5——数据库配置

    数据库的主要属性 限制访问 用来设置数据允许用户访问的状态,或者说允许多少客户访问,有3个选项: MULTI_USER(多个),大多数数据库正常状态,允许多个用户同时访问该数据库. SINGLE_US ...