React - setState 更新状态的两种写法

news/2025/2/14 3:22:31/

React - setState 更新状态的两种写法

  • 一.对象式的 setState
  • 二. 函数式的 setState
  • 三. 对象式的setState 对比 函数式的 setState
  • 四. 一个 setState 使用组件实例

  1. setState() 将对组件 state 的更改排入队列,并通知 React 需要使用更新后的 state 重新渲染此组件及其子组件。
  2. setState() 并不总是立即更新组件,它会批量推迟更新(异步执行)。

一.对象式的 setState

setState(stateChange, [callback])

  • stateChange :为状态改变对象(该对象可以体现出状态的更改)
  • callback 是可选的回调函数, 它在状态更新完毕、界面也更新后(render()调用后)才会被调用
  1. 不使用回调函数
    this.setState({ count: 10 });
    
  2. 使用回调函数
    this.setState({count: 10,},() => {console.log('render()渲染之后', this.state.count);}
    );
    

二. 函数式的 setState

setState(updater, [callback])

  • updater
    (1)返回 stateChange 对象的函数
    (2)可以接收到两个参数:state当前组件的state)和 props组件外部传递过来的参数
  • callback 是可选的回调函数, 它在状态更新完毕、界面也更新后(render()调用后)才会被调用
  1. 不使用回调函数
    // state 当前组件的state
    // props 当前组件外部传递过来的参数
    this.setState((state, props) => {console.log(state, props);return { count: 10 };
    });
    
  2. 使用回调函数
    this.setState(// state 当前组件的state// props 当前组件外部传递过来的参数(state, props) => {console.log(state, props);return { count: 10 };},() => {console.log('render()渲染之后', this.state.count);}
    );
    

三. 对象式的setState 对比 函数式的 setState

对象式的setState函数式的setState的简写方式(语法糖)

  • 如果 新状态 不依赖于 原状态 ,推荐使用对象方式
  • 如果 新状态 依赖于 原状态 ,推荐使用函数方式
  • 如果需要在 setState()执行后 获取最新的状态数据,要在第二个 callback 函数中读取

四. 一个 setState 使用组件实例

import React, { Component } from "react";export default class index extends Component {state = {count: 0,};increment1 = () => {// 对象式的setStatethis.setState({count: this.state.count + 1,},() => {console.log(222, this.state.count);});console.log(111, this.state.count);};increment2 = () => {// 函数式的setState// state 当前组件的state// props 当前组件外部传递过来的参数this.setState((state, props) => {console.log(state, props);return { count: state.count + 2 };},() => {console.log(222, this.state.count);});console.log(111, this.state.count);};render() {return (<div><h4>数值为:{this.state.count}</h4><button onClick={this.increment1}>+1</button><button onClick={this.increment2}>+2</button></div>);}
}

http://www.ppmy.cn/news/2283.html

相关文章

详解设计模式:解释器模式

解释器模式&#xff08;interpreter pattern&#xff09;&#xff0c;是在 GoF 23 种设计模式中定义了的行为型模式。 解释器模式 这种模式被用在 SQL 解析、符号处理引擎等。 解释器模式 给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xf…

Java高效率复习-数据类型和运算符[Java]

第一篇关于JavaSE内容的文章 文章的风格比较涣散&#xff0c;但是都是干货&#xff0c;关于Java系列的&#xff0c;还有就是&#xff0c;我认为只有MySQL基础和JavaSE基础是可以做到可操作性和可执行性较强的。 如果像JavaWeb或者SSM框架这些&#xff0c;光看文章你是根本执行…

gnn神经网络是什么,gnn神经网络代码

1、gnn什么意思? 指图形神经网络。 生物神经网络主要是指人脑的神经网络&#xff0c;它是人工神经网络的技术原型。人脑是人类思维的物质基础&#xff0c;思维的功能定位在大脑皮层&#xff0c;后者含有大约10^11个神经元。 每个神经元又通过神经突触与大约103个其它神经元…

vue - vue使用echarts实现中国地图和点击省份进行查看

文章目录1&#xff0c;实现的效果和功能2&#xff0c;安装ECharts3&#xff0c;main.js里面引入echarts4&#xff0c;实现如下5&#xff0c;遇到的问题6&#xff0c;用到的模拟数据1&#xff0c;实现的效果和功能 vue使用echarts实现中国地图和点击省份进行查看&#xff1b; 下…

【C++】C++11新特性

目录 一.列表初始化initializer_list 1.什么是列表初始化 2.列表初始化的原理 二.auto/decltype/nullptr 1.auto - 自动类型推导 2.decltype - 指定类型 3.nullptr - C空指针 三.范围for 四.右值引用/移动构造/移动赋值/万能引用/完美转发 1.什么是右值 2.左值与右值…

适用于嵌入式单片机的差分升级通用库+详细教程

1. 什么是差分/增量升级&#xff1f; 借用网上的介绍&#xff1a;适合嵌入式的差分升级又叫增量升级&#xff0c;顾名思义就是通过差分算法将源版本与目标版本之间差异的部分提取出来制作成差分包&#xff0c;然后在设备通过还原算法将差异部分在源版本上进行还原从而升级成目…

Python判断是否为字符串的程序是什么?

Python中如何判断是否为字符串?在python中&#xff0c;想要判断是否为字符串可以通过isinstance()函数来判断&#xff0c;接下来小编将通过示例为大家详细的介绍一下。 Python判断是否为字符串 >>> s abc >>> isinstance(s,basestring) #判断是否是字符串型…

试给出二叉树从下至上,从右至左的遍历算法

算法思想&#xff1a;根据层次遍历的顺序可得到与该问题相反的次序&#xff0c;则可利用栈先进后出的性质&#xff0c;按层次遍历输出各结点并压入栈中&#xff0c;出栈时访问结点即可得到从下至上从右边到左边的遍历算法 代码&#xff1a; void LeverOrder(BiTree T){ BiTr…