1、state

1)组件本省也是有状态的,定义在组件内部的state中,state的状态只能由组件自身改变,任何其他组件都不能改变。

当需要改变state时,通过调用setState方法来改变,setState会导致组件重新渲染。

class GreateH extends React.Component{
constructor(props){
super(props);
this.state ={
name:'CoCo'
}
}
handler(params){
this.setState({
name:params
})
};
render(){
return <div>
<h2 onClick={this.handler.bind(this,'kristy')}>hello,{this.state.name}</h2>
</div>
}
}

2)状态更新可能是异步的

import React,{Component} from "react";

class Test extends Component{
constructor(props){
super(props);
this.state = {
num:1
}
}
add = () => {
this.setState({
num:this.state.num+1
})
console.log(this.state.num);
}
render(){
return (
<div>
<p>{this.state.num}</p>
<button onClick={this.add}>点击累加</button>
</div>
)
}
} export default Test;

我点击时,可以看到页面上的this.state.num数值变了,由1变成2,但是打印出来的this.state.num还是1,可以得出在事件中是异步的。

下面再举例说明:

  add = () => {
this.setState({
num:this.state.num+1
});
this.setState({
num:this.state.num+2
});
console.log(this.state.num);
}

页面更新后的值是3,控制台打印出来的结构是1,因为是异步的,所以无法通过上一个状态去计算下一个状态。而更新的结果是3不是4,这是因为setState中会合并操作。如果想要避免这种情况,就需要在setState传入一个函数,如下所示:

  add = () => {
this.setState((state)=>{
return {
num:state.num +1
}
});
this.setState((state)=>{
return {
num:state.num +2
}
});
console.log(this.state.num);
}

这个时候,更新后页面显示的是4不是3,但是依然是异步的。

3)setState(updater,calback)

因为setState更新是异步的,如上代码所示,最后页面显示的是4,但是控制台打印出来的结构是1,无法取得更新后的值,如果要取得更新后的值,需要在setState的参数中,再加一个回调函数,回调函数会在DOM更新后执行,所以可以在回调函数中取到更新后的值

add = () => {
this.setState((state)=>{
return {
num:state.num +1
}
});
this.setState((state)=>{
return {
num:state.num +2
}
},()=>{
console.log("更新后的值:"+this.state.num);
});
console.log(this.state.num);
}

执行结果如下:

React 入门学习笔记整理(五)—— state的更多相关文章

  1. React 入门学习笔记整理目录

    React 入门学习笔记整理(一)--搭建环境 React 入门学习笔记整理(二)-- JSX简介与语法 React 入门学习笔记整理(三)-- 组件 React 入门学习笔记整理(四)-- 事件 R ...

  2. React 入门学习笔记整理(六)—— 组件通信

    1.父子组件通信 1)父组件与子组件通信,使用Props 父组件将name传递给子组件 <GreateH name="kitty"/> 子组件通过props接收父组件的 ...

  3. React 入门学习笔记整理(七)—— 生命周期

    (1)react 生命周期 只有类组件有生命周期,函数组件没有生命周期 1.挂载阶段:这些方法会在组件实例被创建和插入DOM中时被调用: 1)constructor(props) 初始化组件的状态.绑 ...

  4. React 入门学习笔记整理(八)—— todoList

    APP.js import React, { Component,createRef,Fragment} from 'react'; import Todos from './components/t ...

  5. React 入门学习笔记整理(一)——搭建环境

    使用create-react-app脚手架搭建环境 1.安装node .软件下载地址:https://nodejs.org/en/,我下的推荐的版本. 安装之后测试是否安装成功.windows系统下, ...

  6. React 入门学习笔记整理(二)—— JSX简介与语法

    先看下这段代码: import React from 'react'; //最终渲染需要调用ReactDOM库,将jsx渲染都页面中 import ReactDOM from 'react-dom'; ...

  7. React 入门学习笔记整理(三)—— 组件

    1.定义组件 1)函数组件 function GreateH(props){ return <div> <h2>hello,{props.name}</h2> &l ...

  8. React 入门学习笔记整理(四)—— 事件

    1.事件定义 React事件绑定属性的命名采用驼峰式写法,而不是小写. 如果采用 JSX 的语法你需要传入一个函数作为事件处理函数,而不是一个字符串(DOM元素的写法) 在类组件中定义函数,通过thi ...

  9. React 入门学习笔记整理(九)——路由

    (1)安装路由 React-router React-router提供了一些router的核心api,包括Router, Route, Switch等,但是它没有提供dom操作进行跳转的api. Re ...

随机推荐

  1. 利用SSH反向隧道,连接内网服务器

    前言 公司有一台文件服务器(内部使用,无外网IP),上面主要安装了SVN服务,用来存储和共享各部门的文档,因为都是内网,直接远程(mstsc)上去就可以方便维护,但最近公司租了新的办公室,部分员工被分 ...

  2. :nth-child(n)选择器

    p:nth-child(n)   选择属于父元素的第n个子元素的每个p标签

  3. 机器学习与Tensorflow(7)——tf.train.Saver()、inception-v3的应用

    1. tf.train.Saver() tf.train.Saver()是一个类,提供了变量.模型(也称图Graph)的保存和恢复模型方法. TensorFlow是通过构造Graph的方式进行深度学习 ...

  4. 机器学习与Tensorflow(6)——LSTM的Tensorflow实现、Tensorboard简单实现、CNN应用

    最近写的一些程序以及做的一个关于轴承故障诊断的程序 最近学习进度有些慢 而且马上假期 要去补习班 去赚下学期生活费 额.... 抓紧时间再多学习点 1.RNN递归神经网络Tensorflow实现程序 ...

  5. [P4318] 完全平方数

    想不出什么办法能直接算的(别跟我提分块打表),不如二分答案吧:设\(f(x)=\sum_{i=1}^n [i不是"完全平方数"]\), 显然f(x)与x正相关.再结合筛法.容斥,不 ...

  6. .NET 构造DataTable返回多个json值

    有时候我们使用Ajax链接一般处理程序需要返回多个值,然而这些数据并非在一个查询表内,此时便想到构造一个虚拟的DataTable,这样就可以返回多个值了(当然有很多办法,这是其中一种 ). 首先我们需 ...

  7. 深入浅出分析MySQL MyISAM与INNODB索引原理、优缺点分析

    本文浅显的分析了MySQL索引的原理及针对主程面试的一些问题,对各种资料进行了分析总结,分享给大家,希望祝大家早上走上属于自己的"成金之路". 学习知识最好的方式是带着问题去研究所 ...

  8. 强制清除 gradle 依赖缓存

    今天同事误上传一个库,然后又删除了... 我刚好把他上传的库给down下来了...然后项目一直报错,clean...重新编译...删build文件....全都不管用===== 好几个人研究了好久,只能 ...

  9. 大叔力量VIP介绍

    VIP介绍 框架技术点 平台 仓储 日志收集 缓存 消息队列 服务总线 事务 任务调度 授权 模块化 服务发现 .net ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ - .net core ✔ ✔ ✔ ✔ ✔ ...

  10. dva reduxRouter 跳转路由的参数

    应该由 新页面的 this.props.location获取