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地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置 ...
随机推荐
- 141、Java内部类之实例化外部类对象
01. 代码如下: package TIANPAN; class Outer { // 外部类 private static String msg = "Hello World !" ...
- Qt中QListWidget的verticalScrollMode选项设置为ScrollPerPixel无效果的原因
设置为ScrollPerPixel无效果,根据Qt手册的描述,需要在设置一次setSingleStep()的值,才会生效
- CodeBlocks_OpenGL配置
CodeBlocks版本:13.12 下载OpenGL配置文件 1.glut.dll glut32.dll放入系统盘Windows\System32文件夹 2.glut.h放入CodeBlocks安装 ...
- Android适配底部虚拟按键的方法
---恢复内容开始--- 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近项目进行适配的时候发现部分(如华为手机)存在底部虚拟按键的手机会因为虚拟按键的存在导致挡住部分界面,因为需要全屏显示 ...
- 【ABP】从零开始学习ABP_001_新建实体功能
上一篇文章中介绍了如何下载.运行ABP Zero示例项目,这个示例项目可以直接作为模板进行二次开发,很适合做企业开发框架. 本未介绍基于ABP Zero示例项目,如何新建一个自定义的实体. 此处已Eq ...
- osg 线框模式,点模式切换
需要加 viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet ...
- 1-m*n循环填数(用标记数组)blibli2018秋招第三题一个类型
#include <iostream> #include<string> #include<algorithm> using namespace std; ; in ...
- VS中MFC项目文件特别大的解决办法
转 来自http://m.zhizuobiao.com/vc/vc-18082800177/ 自己插个眼 项目文件比较大因为 项目下有个隐藏文件夹.vs 下面是解决办法 本文主要向大家介绍了VC编程 ...
- jquery解析
OutOfMemory.CN β 聚客 代码 专栏 教程 Maven Gitter 标签 登录注册 好书:重构 改善既有代码的设计[京东 亚马逊] | 敏捷软件开发原则.模式与实践[京东 亚 ...
- java api 远程连接 hdfs
IDEA中新建Maven工程,添加POM依赖, 在IDE的提示中, 点击 Import Changes 等待自动下载完成相关的依赖包. <?xml version="1.0" ...