广告
返回顶部
首页 > 资讯 > 精选 >React中setState如何使用与如何同步异步
  • 334
分享到

React中setState如何使用与如何同步异步

2023-06-14 05:06:40 334人浏览 薄情痞子
摘要

这篇文章主要介绍“React中setState如何使用与如何同步异步”,在日常操作中,相信很多人在React中setState如何使用与如何同步异步问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React中s

这篇文章主要介绍“React中setState如何使用与如何同步异步”,在日常操作中,相信很多人在React中setState如何使用与如何同步异步问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React中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如何使用与如何同步异步”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

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

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

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

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

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

下载Word文档
猜你喜欢
  • React中setState如何使用与如何同步异步
    这篇文章主要介绍“React中setState如何使用与如何同步异步”,在日常操作中,相信很多人在React中setState如何使用与如何同步异步问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React中s...
    99+
    2023-06-14
  • 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 Context与setState如何使用
    这篇文章主要介绍“React Context与setState如何使用”,在日常操作中,相信很多人在React Context与setState如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-07-04
  • setState如何在react 中使用
    setState如何在react 中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。setState是同步还是异步自定义合成事件和react钩子函数中异步更新state以...
    99+
    2023-06-14
  • Redux中异步action与同步action的使用
    异步action action:Object{} => 同步actionaction:function() => 异步action  同步action异步act...
    99+
    2022-11-13
  • Python中的同步与异步编程,如何处理数组?
    随着互联网的飞速发展,计算机的性能越来越强大,人们的需求也越来越高。在这样的背景下,同步和异步编程逐渐成为了热门话题。同步和异步编程的本质区别在于程序的执行方式不同,同步是指程序在执行某个任务时,会一直等待任务完成后再执行下一个任务;而异...
    99+
    2023-09-08
    同步 数组 异步编程
  • 如何使 PHP 与 NumPy 同步?
    PHP 和 NumPy 是两个强大的工具,它们分别在不同的领域有着广泛的应用。但是,有时候我们需要将这两个工具结合起来使用,以实现更多的功能。那么,如何使 PHP 与 NumPy 同步呢?下面将为您详细介绍。 一、什么是 NumPy? Nu...
    99+
    2023-11-03
    numpy numy 同步
  • PHP 异步编程:如何使用 API 实现同步?
    随着 Web 应用程序变得越来越复杂,需要处理的数据量也越来越大,很多时候同步处理数据已经不能满足需求。异步编程的出现,为处理这些复杂的数据提供了新的解决方案。本文将介绍 PHP 异步编程的基本概念以及如何使用 API 实现同步。 一、什...
    99+
    2023-08-05
    异步编程 api 同步
  • Python混合如何使用同步和异步函数
    这篇文章主要介绍“Python混合如何使用同步和异步函数”,在日常操作中,相信很多人在Python混合如何使用同步和异步函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python混合如何使用同步和异步函数...
    99+
    2023-07-06
  • React组件中的state和setState如何使用
    本篇内容主要讲解“React组件中的state和setState如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React组件中的state和setState如何使用”吧!state的基本...
    99+
    2023-06-29
  • 如何理解ajax中的async属性值同步和异步及同步和异步区别
    这篇文章给大家介绍如何理解ajax中的async属性值同步和异步及同步和异步区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。jquery中ajax方法有个属性async用于控制同步和...
    99+
    2022-10-19
  • Python 中如何使用同步和异步编程来管理 Git?
    Git 是一款非常流行的版本控制工具,它可以让开发者更好地管理代码,协作开发和版本迭代。在 Python 中,我们可以使用 GitPython 库来实现 Git 的管理。在实际使用 GitPython 进行 Git 管理时,我们可以选择使...
    99+
    2023-11-07
    同步 git 异步编程
  • 半同步与异步的MySQL主从复制如何配置
    这篇文章主要介绍了半同步与异步的MySQL主从复制如何配置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、MySQL主从复制原理这里我以M...
    99+
    2022-10-18
  • react如何请求数据异步
    这篇文章主要讲解了“react如何请求数据异步”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react如何请求数据异步”吧!react请求数据异步的方法:1、通过“npm i redux-t...
    99+
    2023-07-04
  • Promise和Generato中如何用同步方法写异步JavaScript
    这篇文章给大家介绍Promise和Generato中如何用同步方法写异步JavaScript,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。最近在写一个自己的网站的时候(可以观摩一下~C...
    99+
    2022-10-19
  • React如何使用useEffect解决setState副作用
    本篇内容主要讲解“React如何使用useEffect解决setState副作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React如何使用useEffect解决setState副作用”吧!...
    99+
    2023-07-04
  • ajax如何将异步请求改为同步
    这篇文章主要讲解了“ajax如何将异步请求改为同步”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ajax如何将异步请求改为同步”吧! ...
    99+
    2022-10-19
  • D3.js中强制异步文件如何读取同步
    这篇文章主要为大家展示了“D3.js中强制异步文件如何读取同步”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“D3.js中强制异步文件如何读取同步”这篇文章吧。发...
    99+
    2022-10-19
  • async/await如何让异步操作同步执行
    小编给大家分享一下async/await如何让异步操作同步执行,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一.前言我们经常会遇到这样的麻烦事,多个函数按顺序执行,返回结果却不是我们预期的...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作