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. C#(winform)为button添加背景图片,并去掉各种边框

    1.既然是添加背景图片 所以这里应该使用 Button.BackgroudImage = "" ;来设置图片 而不应该使用  Button.Image = "" ...

  2. CSS position属性absolute relative等五个值的解释

    DIV CSS position绝对定位absolute relative教程篇 常常使用position用于层的绝对定位,比如我们让一个层位于一个层内具体什么位置,为即可使用position:abs ...

  3. echart.js 参数解释

    Data参数 获取容器对象 var canvas = document.getElementById("myCanvas"); 渲染 var ctx = canvas.getCon ...

  4. 【angular5项目积累总结】表单复杂校验

    view code form.css :host { display: flex; width: 100%; height:100%; border-left:1px solid #ccc; } .i ...

  5. C《二》

    开始阅读谭浩强的C语言程序设计. 编译一个程序,除了语法以外,还需要管理内存,就是数据结构,学习如何高效的利用内存:数据关系的处理.例如学生管理系统的开发,但是数据关系是有最优解的,也就是可以学会的, ...

  6. 理解Flexbox:你需要知道的一切

    这篇文章介绍了Flexbox模块所有基本概念,而且是介绍Flexbox模块的很好的一篇文章,所以这篇文章非常的长,你要有所准备. 学习Flexbox的曲线 @Philip Roberts在Twitte ...

  7. 微信小程序 c#后台支付结果回调

    又为大家带来简单的c#后台支付结果回调方法,首先还是要去微信官网下载模板(WxPayAPI),将模板(WxPayAPI)添加到服务器上,然后在打开WxPayAPI项目中的example文件下的 Nat ...

  8. SQL Serever学习6——数据表

    数据表 表的构成 数据库中的基本表由记录(行)和字段(列)构成,SQLServer2008每个表可以有1024个列,每个列可以有8060字节(不包括iamge,ntext,text类型). 记录(Re ...

  9. Rest架构下的增删改查

    首先还是要连接一下什么是Rest, REST是英文representational state transfer(表象性状态转变)或者表述性状态转移;Rest是web服务的一种架构风格;使用HTTP, ...

  10. [linux] C语言Linux系统编程-做成守护进程

    守护进程: 必须是init进程的子进程,运行在后台,不与任何控制终端相关联. 通过以下步骤成为守护进程 1.调用fork()创建出来一个新的进程,这个新进程会是将来的守护进程 2.在新守护进程的父进程 ...