当前位置: 首页 > news >正文

14. setState是异步更新

setState是异步更新

  • 1.3.1. setState的更多用法
      1. setState处理数据的原理
      • 1.1. 原理:把原来的state新的state做了一个合并,如果出现属性一样的情况下,用新属性把原来的属性给覆盖掉,内部做了一个这样的事情,做完合并值之后再在合适的时机调用render函数
      • 1.2. 为什么是合适时机调用render函数呢?
        • render函数不是立马调用的,因为它还涉及到一些性能优化的东西,然后在去调用render函数
      • 1.3. 数据合并的示例图如下:
        • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      1. 用法一:基本使用
      • 关键代码如下:
          this.setState({message: '你好啊 李银河'})
        
      1. 用法二:setState可以传入一个回调函数
      • 3.1. 传入回调函数的代码运行原理:
        • 原理:给setState传入了一个回调函数,内部会主动回调这个函数,并且拿到结果进行一个值合并,在回调函数的过程中,会把原来的state和props传递过来
      • 3.2. 传入回调函数的好处:
        • 好处一: 可以在回调函数中编写新的state的逻辑(写在外面也可以,写在函数里面内聚性更强)
        • 好处二: 当前回调函数会将之前的state和props传递进来
      • 3.2. 关键代码如下:
          // 好处一: 可以在回调函数中编写新的state的逻辑(写在外面也可以,写在函数里面内聚性更强)// 好处二: 当前回调函数会将之前的state和props传递进来this.setState((state, props) => { // 原来的state,props可以拿到// 1. 编写一些对新的state处理逻辑// 2. 可以获取之前的state和props// 原理:给setState传入了一个回调函数,内部会主动回调这个函数,并且拿到结果进行一个值合并,在回调函数的过程中,会把原来的state和props传递过来console.log('state===', state, props) console.log(this.state.message, this.props)return {message: '你好啊,李银河'}})
        
      1. 用法三:setState在React的事件处理中是一个异步调用
        1. 异步调用:它不会阻塞接下来的代码执行,这个操作并不会立马完成的可能需要经过一定的时间后真正的完成你对应的操作
        1. 如果希望在数据更新之后(数据合并), 获取到对应的结果执行一些逻辑代码, 那么可以在setState中传入第二个传输:callback
        1. 示例代码如下:
          this.setState({ message: '你好啊,李银河' }, () => {console.log('+++++++++++++', this.state.message)})console.log('----------', this.state.message)
        1. 代码运行图如下:
          外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      1. 完整代码如下:
        import React, { Component } from 'react'export class App extends Component {constructor() {super()this.state ={message: 'hello world',counter: 1}}changeText () {// 1. setState更多用法// 1. 基本使用 setState的原理:(Object.assign(this.state, newState)合并后 -> render()) // setState的原理:把原来的state和新的state做了一个合并,如果出现属性一样的情况下,用新属性把原来的属性给覆盖掉,内部做了一个这样的事情,做完合并值之后再在合适的时机调用render函数// render函数不是立马调用的,因为它还涉及到一些性能优化的东西,然后在去调用render函数// this.setState({//   message: '你好啊 李银河'// })// 2. setState可以传入一个回调函数// 好处一: 可以在回调函数中编写新的state的逻辑(写在外面也可以,写在函数里面内聚性更强)// 好处二: 当前回调函数会将之前的state和props传递进来// this.setState((state, props) => { // 原来的state,props可以拿到//   // 1. 编写一些对新的state处理逻辑//   // 2. 可以获取之前的state和props//   //  给setState传入了一个回调函数,内部会主动回调这个函数,并且拿到结果进行一个值合并,在回调函数的过程中,会把原来的state和props传递过来//   console.log('state===', state, props) //   console.log(this.state.message, this.props)//   return {//     message: '你好啊,李银河'//   }// })// 3. setState在React的事件处理中是一个异步调用// 异步调用:它不会阻塞接下来的代码执行,这个操作并不会立马完成的, 可能需要经过一定的时间后真正的完成你对应的操作// - 如果希望在数据更新之后(数据合并), 获取到对应的结果执行一些逻辑代码// - 那么可以在setState中传入第二个传输:callbackthis.setState({ message: '你好啊,李银河' }, () => {console.log('+++++++++++++', this.state.message)})console.log('----------', this.state.message)}increment () {this.setState({counter: this.state.counter + 1})}render() {const { message, counter } = this.statereturn (<div><h2>message: {message}</h2><button onClick = {e => this.changeText()}>修改文本</button><h2>当前计数:{ counter }</h2><button onClick= { e => this.increment()}>+1</button></div>)}}export default App
http://www.dtcms.com/a/553358.html

相关文章:

  • 22. React中CSS使用方案
  • 深度对比 ArrayList 与 LinkedList:从底层数据结构到增删查改的性能差异实测
  • 信任的重构:S11e Protocol 如何以算法取代中介
  • Python 第二十五节 常用练习问题(三)
  • Spring AI Alibaba 【五】
  • 什么网站是用html做的2023年时政热点事件
  • 泉州企业免费建站制作网站首页
  • 2025年10月31日全球AI前沿动态
  • Linux线程同步(四)
  • 全新升级!山海鲸4.6.3版本正式亮相
  • 图像压缩-将8bit数据压缩为2bit
  • 海宁网站怎么做seo企业网站能起到什么作用
  • 手机在网上怎么创建自己的网站网站开发人员职位
  • LineSlam线特征投影融合(Fuse) 中pML->GetLineNormalVector()的理解代码理解
  • 【图像处理基石】多波段图像融合算法入门:从概念到实践
  • Docker核心文件:DockerCompose文件
  • 企业网站 自助建站网站做竞价经常会被攻击吗
  • Android ble理解
  • 深入理解 Spring Boot Web 开发中的静态资源处理机制
  • 网站建设费记什么科目产品ui设计是什么
  • 衡水企业网站设计国内app开发公司
  • 【java EE】IDEA 中创建或迁移 Spring 或 Java EE 项目的核心步骤和注意事项
  • 如何保证缓存与数据库更新时候的一致性
  • 【Spring Boot Starter 设计思考:分离模式是否适用于所有场景】
  • HTTP 头部参数数据注入测试sqlilabs less 18
  • 网站速度慢的原因做网站建设优化的电话话术
  • 【数据结构】单链表 练习记录
  • mac 安装 jdk17
  • 【项目实战1-瑞吉外卖|day22】
  • 怎么用dw做响应式网站网站主持人制作网站代言人