广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >React中setState的使用与同步异步的使用
  • 667
分享到

React中setState的使用与同步异步的使用

2024-04-02 19:04:59 667人浏览 泡泡鱼
摘要

在React中,修改状态如果直接使用this.state,不会引起组件的重新渲染,需要通过 this.setState来对组件的属性进行修改。 1、this.setState的两种

React中,修改状态如果直接使用this.state,不会引起组件的重新渲染,需要通过 this.setState来对组件的属性进行修改。

1、this.setState的两种定义方式

定义初始状态


state = { count: 0 },

如果此时有一个按钮,点击按钮让计数加1,我们可以有两种写法

(1)传递对象


this.setState({ count: this.state.count + 1})

(2)传递函数


this.setState((state, props) => ({ count: count + 1}))

2、setState的两种方式有什么不同?

如果变更的state的值需要依赖于上一次的state的值,这种情况就需要用到函数的形式,比如以下这种情况


addCount(){
  this.setState({ count: this.state.count + 1})
  this.setState({ count: this.state.count + 1})
  this.setState({ count: this.state.count + 1})
}

此时只会执行一次+1的操作,因为在React内部,会将多次setState合并操作,新的state由 Object.assgin({}, {count: 0},  { count: 1}) 合并所得,以上赋值会执行三次,但因为count的值没有更新,所以最终执行的结果只+1,如果setState的赋值是函数,那情况就不一样了


addCount(){
  this.setState((state, props) => ({ count: count + 1}))
  this.setState((state, props) => ({ count: count + 1}))
  this.setState((state, props) => ({ count: count + 1}))
}

这样的操作会得到+3的效果,因为React会进行判断,如果传入的是函数,那么将执行此函数,此时count的值就已经被修改了

3、setState是同步还是异步的?

☆☆☆☆☆ 是异步的

(1) 即我们通过this.setState修改了状态之后,在它的下一行输出state的值并不会得到新的值

(2) 为什么是异步?

有两个原因,一是提高效率,每次修改state的值都会造成render的重新渲染,将多次修改state的值合并统一更新可以提高性能;二是render的更新会晚一些,如果render中有子组件,子组件的props依赖于父组件的state,props和state就不能保持一致

(3) 如何获取异步时的state值?
① 在setState的回调函数中


this.setState({ 
  count: this.state.count + 1}}, 
  ()=>{ console.log(this.state.count)})

② 在componentDidUpdate中获取


componentDidUpdate(){
  console.log(this.state.count)
}

☆☆☆☆☆ 是同步的

(1) 即我们通过this.setState修改状态之后,在它的下一行输出state是新的值

(2) 什么场景下是同步的?
① 原生js获取dom元素,并绑定事件


<button id="addBtn">点我+1</button>
componentDidMount(){
   const addBtn = document.getElementById('addBtn')
   changeBtn.addEventListener('click',()=>{
       this.setState({ count: this.state.count + 1})
       console.log(this.state.message)
   })
}

② 计时器 setTimeout


<button onClick={ e => this.addOne() }>点我+1</button>
addOne(){
setTimeout(()=>{ this.setState({ count: this.state.count + 1 })
 console.log(this.state.count ) },0)
}

到此这篇关于React中setState的使用与同步异步的使用的文章就介绍到这了,更多相关React setState同步异步内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: React中setState的使用与同步异步的使用

本文链接: https://www.lsjlt.com/news/121659.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • React中setState的使用与同步异步的使用
    在react中,修改状态如果直接使用this.state,不会引起组件的重新渲染,需要通过 this.setState来对组件的属性进行修改。 1、this.setState的两种...
    99+
    2022-11-11
  • React中setState同步异步场景的使用
    目录setState同步异步场景描述原理保证内部数据统一启用并发更新参考setState同步异步场景 React通过this.state来访问state,通过this.setStat...
    99+
    2022-11-13
  • React中setState如何使用与如何同步异步
    这篇文章主要介绍“React中setState如何使用与如何同步异步”,在日常操作中,相信很多人在React中setState如何使用与如何同步异步问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React中s...
    99+
    2023-06-14
  • React 中的 setState 是同步还是异步
    setState 是同步还是异步?肯定是异步的呀。 确定么?那看一下这段代码会打印什么: import { Component } from 'react'; class Dong ...
    99+
    2022-11-13
  • React中setState同步和异步的示例分析
    这篇文章主要介绍React中setState同步和异步的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! React起源于Facebook的内部项目。React的出现是革命性的创新,React的是一个...
    99+
    2023-06-15
  • React中setState同步或异步问题的示例分析
    这篇文章主要为大家展示了“React中setState同步或异步问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“React中setState同步或异步问题的示例分析”这篇文章吧。1....
    99+
    2023-06-25
  • 关于React中setState同步或异步问题的理解
    目录1. setState同步?异步? 2. 表现为异步 1. React 合成事件 2. 生命周期函数 3. 表现为同步 1. 原生事件 2. setTimeout 4. setS...
    99+
    2022-11-12
  • Redux中异步action与同步action的使用
    异步action action:Object{} => 同步actionaction:function() => 异步action  同步action异步act...
    99+
    2022-11-13
  • React 中 setState 的异步操作案例详解
    目录前言React 中的 setState 为什么需要异步操作?什么时候setState会进行同步操作?前言 在使用state的时候, 如果我们企图直接...
    99+
    2022-11-13
  • React组件的创建与state同步异步详解
    目录组件的创建类组件函数式组件组件的嵌套组件的样式行内样式class样式事件处理事件绑定事件的参数传递ref的应用状态(state)定义statesetStatesetState同步...
    99+
    2023-03-14
    React组件的创建 React state同步异步
  • React中的setState/useState怎么使用
    这篇文章主要介绍“React中的setState/useState怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“React中的setState/useState怎么使用”文章能帮助大家解决问...
    99+
    2023-07-05
  • Java中的同步与异步的概念
    这篇文章主要讲解了“Java中的同步与异步的概念”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中的同步与异步的概念”吧!一.进程同步及异步的概念1.进程同步:就是在发出一个功能调用时...
    99+
    2023-05-30
    java
  • React组件的创建与state同步异步方法是什么
    这篇文章主要介绍“React组件的创建与state同步异步方法是什么”,在日常操作中,相信很多人在React组件的创建与state同步异步方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React组件...
    99+
    2023-07-05
  • Python中同步与异步的区别是什么
    今天就跟大家聊聊有关Python中同步与异步的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. “同步”和“异步”是什么意思?Web 应...
    99+
    2022-10-19
  • Android中同步与异步的关系是什么
    本篇文章为大家展示了Android中同步与异步的关系是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。android 只有UI线程可以刷新界面,其他副线程不行,这样就需要副线程通过通信消息修改刷新...
    99+
    2023-06-19
  • React组件中的state和setState如何使用
    本篇内容主要讲解“React组件中的state和setState如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React组件中的state和setState如何使用”吧!state的基本...
    99+
    2023-06-29
  • React-hooks中的useEffect使用步骤
    目录1.理解函数副作用什么是副作用常见的副作用2.基础使用使用步骤示例代码3.依赖项控制useEffect 永远是在 DOM渲染完成之后执行 1.理解函数副作用 什么是副作用 对于R...
    99+
    2022-11-13
  • Node.js中同步和异步编程的区别及使用方法
    目录一、进程和线程二、同步和异步同步阻塞异步问题一、进程和线程 代码编写完毕在编译的过程中计算机的内存中会开辟一个空间来存储代码,这个空间就相当于是进程,可以将进程类比于工厂的厂房,...
    99+
    2023-05-18
    Node.js中同步和异步 Node.js 同步 Node.js 异步
  • Ajax请求中异步与同步的示例分析
    这篇文章主要为大家展示了“Ajax请求中异步与同步的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Ajax请求中异步与同步的示例分析”这篇文章吧。 ...
    99+
    2022-10-19
  • React中setState/useState的使用方法详细介绍
    目录一、React如何使用setState/useState的最新的值A.使用setState的最新的值B.使用useState的最新的值二、React中setState/useSt...
    99+
    2023-05-14
    React setState与useState React setState React useState
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作