React 入门学习笔记整理(五)—— state
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的更多相关文章
- React 入门学习笔记整理目录
React 入门学习笔记整理(一)--搭建环境 React 入门学习笔记整理(二)-- JSX简介与语法 React 入门学习笔记整理(三)-- 组件 React 入门学习笔记整理(四)-- 事件 R ...
- React 入门学习笔记整理(六)—— 组件通信
1.父子组件通信 1)父组件与子组件通信,使用Props 父组件将name传递给子组件 <GreateH name="kitty"/> 子组件通过props接收父组件的 ...
- React 入门学习笔记整理(七)—— 生命周期
(1)react 生命周期 只有类组件有生命周期,函数组件没有生命周期 1.挂载阶段:这些方法会在组件实例被创建和插入DOM中时被调用: 1)constructor(props) 初始化组件的状态.绑 ...
- React 入门学习笔记整理(八)—— todoList
APP.js import React, { Component,createRef,Fragment} from 'react'; import Todos from './components/t ...
- React 入门学习笔记整理(一)——搭建环境
使用create-react-app脚手架搭建环境 1.安装node .软件下载地址:https://nodejs.org/en/,我下的推荐的版本. 安装之后测试是否安装成功.windows系统下, ...
- React 入门学习笔记整理(二)—— JSX简介与语法
先看下这段代码: import React from 'react'; //最终渲染需要调用ReactDOM库,将jsx渲染都页面中 import ReactDOM from 'react-dom'; ...
- React 入门学习笔记整理(三)—— 组件
1.定义组件 1)函数组件 function GreateH(props){ return <div> <h2>hello,{props.name}</h2> &l ...
- React 入门学习笔记整理(四)—— 事件
1.事件定义 React事件绑定属性的命名采用驼峰式写法,而不是小写. 如果采用 JSX 的语法你需要传入一个函数作为事件处理函数,而不是一个字符串(DOM元素的写法) 在类组件中定义函数,通过thi ...
- React 入门学习笔记整理(九)——路由
(1)安装路由 React-router React-router提供了一些router的核心api,包括Router, Route, Switch等,但是它没有提供dom操作进行跳转的api. Re ...
随机推荐
- XCode 设置自定义环境变量
XCode 设置自定义环境变量 Product -> Scheme -> Edit Scheme -> 之后设置环境变量.
- Linux pwn入门教程(1)——栈溢出基础
作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42241-1-1.html 0×00 函数的进入与返回 要想理解栈溢出,首先必须 ...
- tk.mybatis通用工具采坑记
tk.mybatis通用工具pom <!--mybatis依赖--> <dependency> <groupId>org.mybatis.spring.boot&l ...
- Win10手记-取色器ColorPicker的实现
最近个人项目需要用到ColorPicker,但是适用于WinRT和Win10的基本没用,所以只能自己造轮子了. 平台环境 Windows 10 Visual Studio 2015 思路 确定需求后, ...
- ubuntu里面搭建虚拟环境过程中遇到的问题以及解决方法。
今天开始学习Django,发现要搭建虚拟环境.就按照百度上面的方法在ubuntu中输入终端命名进行配置.发现自己是按照步骤来的.却总是在最后一步启动 source .bashrc 的时候出现''com ...
- SOA和微服务架构的区别
微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用.这些小应用之间通过服务完成交互和集成.每个小应用从前端web ui ...
- redis-cluster无备节点,安装脚本
#!/bin/bash #安装gcc yum -y install gcc #安装RVM所需的程序包 yum -y install gcc-c++ patch readline readline-de ...
- salesforce lightning零基础学习(七) 列表展示数据时两种自定义编辑页面
上一篇Lightning内容描述的是LDS,通过LDS可以很方便的实例化一个对象的数据信息.当我们通过列表展示数据需要编辑时,我们常使用两种方式去处理编辑页面:Pop Up Window弹出修改详情以 ...
- 从零开始学 Web 之 jQuery(一)jQuery的概念,页面加载事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- mybatis--Mapper 常见报错总结(持续总结)
本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 1.The content of elements must consist of well-f ...