react的this.setState详细介绍
this.setState是react类组件中最常用的一个react API,使用它可以改变state从而改变页面。今天我们就来详细的学习一下这个东西。
比如:
import React, { Component } from react;
export default class Test extends Component {
constructor() {
super()
this.state = {
count: 0,
}
}
render() {
return (
<div>
您的点击数:{this.state.count}
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
点击数+1
</button>
</div>
这样当你每点击button按钮一次,上面的点击数就会+1
但是this.setState还有很多的知识点你没有了解,真正项目当中可能会出现很多你不理解的bug。
比如说:
this.setState是异步的
在你调用了this.setState后在他的下面输出他的结果还是没变的状态
this.setState({ count: this.state.count + 1 })
console.log(this.state.count) //结果还是之前的,而不是+1之后的
this.setState的第一个参数可以是一个对象,也可以是一个函数返回一个对象,函数的参数是上一次的state
示例:
this.setState((prevState) => ({ prevState.count + 1 }));
this.setState的第二个参数是它的回调函数,在前面重新给state赋值后执行
示例:
this.setState({
count: this.state.count + 1,
}, () => console.log(this.state.count)) //结果是+1之后的count
连续调用this.setState的结果
示例:
this.setState({ count: this.state.count + 1 })
this.setState({ count: this.state.count + 1 })
this.setState({ count: this.state.count + 1 })
虽然调用了三次 setState ,但是 count 的值还是为 1。因为多次调用会合并为一次,只有当更新结束后 state 才会改变,三次调用等同于如下代码
Object.assign(
{},
{ count: this.state.count + 1 },
{ count: this.state.count + 1 },
{ count: this.state.count + 1 },
)
如果想让最后的结果等于3请用上面介绍的this.setState()的参数为函数返回对象的形式。
或者像下面这样:
额外注意点
但是如果把上面的代码改装一下效果就不一样了
setTimeout(() => {
this.setState({ count: this.state.count + 1 })
this.setState({ count: this.state.count + 1 })
this.setState({ count: this.state.count + 1 })
}, 100)
这时候这三次都会被执行到。
原因是因为React的更新策略没有被触发到。
原文链接:https://blog.csdn.net/weixin_43606158/article/details/94356884
react的this.setState详细介绍的更多相关文章
- <react> 组件的详细介绍:
<react> 组件的详细介绍: 思维导图: 代码介绍: TodoList:(组件) import React, { Component } from 'react' import Sty ...
- react-native热更新之CodePush详细介绍及使用方法
react-native热更新之CodePush详细介绍及使用方法 2018年03月04日 17:03:21 clf_programing 阅读数:7979 标签: react native热更新co ...
- React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例)
React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例) TextInput组件介绍 TextInput是一个允许用户在应用中通过键盘输入文本的基本组 ...
- vue对比其他框架详细介绍
vue对比其他框架详细介绍 对比其他框架 — Vue.jshttps://cn.vuejs.org/v2/guide/comparison.html React React 和 Vue 有许多相似之处 ...
- Kafaka详细介绍机制原理
1. kafka介绍 1.1. 主要功能 根据官网的介绍,ApacheKafka®是一个分布式流媒体平台,它主要有3种功能: 1:It lets you publish and ...
- [React技术内幕] setState的秘密
对于大多数的React开发者,setState可能是最常用的API之一.React作为View层,通过改变data从而引发UI的更新.React不像Vue这种MVVM库,直接修改data并不能视图的改 ...
- 150多个Flutter组件详细介绍送给你
迷茫是什么,迷茫就是大事干不了,小事不想干,能力配不上欲望,才华配不上梦想. 150+Flutter组件详细介绍地址:http://laomengit.com/ 前言 我在Flutter未正式发布之前 ...
- [No0000A7]批处理经常用到的变量及批处理>NUL详细介绍
绝对路径是指调用绝对的程序位置的路径,例如: start C:\Windows\test.exe 相对路径是文件改变路径以后还会按照变量的路径所在位置去调用,例如: start %WINDIR%\te ...
- linux配置网卡IP地址命令详细介绍及一些常用网络配置命令
linux配置网卡IP地址命令详细介绍及一些常用网络配置命令2010-- 个评论 收藏 我要投稿 Linux命令行下配置IP地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置 ...
随机推荐
- change事件和input事件的区别
input事件: input事件在输入框输入的时候回实时响应并触发 change事件: change事件在input失去焦点才会考虑触发,它的缺点是无法实时响应.与blur事件有着相似的功能,但与bl ...
- react 开发 vscode需要安装的开发插件
1.npm Intellisense 有自动补全的功能 var lodash = require('lodash') 2. path Intellisense 自动补全文件名 import C ...
- 关于2017届学长制作分享软件share(失物招领)的使用体验和需改进的内容
使用体验 1.注册界面 注册界面提示明显,提示用户输入什么类型的密码,而且输入什么样的用户名不限,注册界面色调比较单一,注册内容比较少,而且比较简单,体验感比较好,但注册界面色调和设计全无,使用感一般 ...
- LeetCode中等题(一)
题目一: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- 5G风口之下,NFV为何发展迅速
导读 5G高带宽.低时延.大容量的接入方式,注定它一定要依赖于跟以往完全不同的专业设备模式来实现,因此也创造了更多的方向和机会.NFV就是其中之一. 5G最大的变化在网络层面,需要底层网络架构形成一种 ...
- 新闻网大数据实时分析可视化系统项目——15、基于IDEA环境下的Spark2.X程序开发
1.Windows开发环境配置与安装 下载IDEA并安装,可以百度一下免费文档. 2.IDEA Maven工程创建与配置 1)配置maven 2)新建Project项目 3)选择maven骨架 4)创 ...
- 【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)
转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49992269 本文出自:[江清清的博客] (一).前言: [好消息] ...
- Keepalived——HA
一.HA集群中的相关术语 1.节点(node) 运行HA进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和高可用软件服务,在高可用集群中,节点有主次之分,分别称之为主节 ...
- BEC合约整数溢出漏洞还原与分析
一.币圈一秒,人间一年 有道是币圈一日,人间一年.这个说法又得升级了,叫币圈一秒,人间一年. 前不久,币圈又出大事啦.BEC智能合约被爆出整数溢出漏洞,导致黑客能无限印币,在一次交易中,也就那么几秒钟 ...
- [易语言][ExDui][Tutorial]1.NameSelector
咕咕咕 尝试自己写组件对象被易语言的对象劝退后,我又回来写教程了. 相信上一章对如何创建窗口讲得足够透彻了,这一章上项目实战:点名器. 点名器这种简单的东西实在是经常被拿出来开刀啊. 还有一点,发现之 ...