一文让你不再困惑setState之getState(上)

本文详细探讨React中setState的特点,包括批量执行、可能的异步行为,以及如何在不同场景下获取最新状态值。通过示例和模拟实现,解释了setState的更新机制和getState()的使用,帮助读者深入理解React组件状态的管理。
摘要由CSDN通过智能技术生成

在面试中我们通常会被问到有关 setState 相关的问题。
接下来我们先看几个示例,然后通过 模拟实现 setState的行为来更加深刻的理解实例得出的结论。

setState 的特点

  • 批量执行:多key一次执行,对同一个key多次操作会合并,会执行最后一次
  • 可能是异步的(如在生命周期、react合成事件中)
  • 在定时器和原生事件中,它是同步的;

由于 setState 可能是异步的,如果要立即获取到最新的值,有三种方式:

  • 传函数给setState, 或者在第二个参数回调函数中获取最新值
  • 在定时器setTimeout中
  • 在原生事件中(跳过了react的事件机制)

咋一看,还是觉得比较绕,结合以上特点,我们来看几个例子

  1. 多次执行同一个key
class App1 extends React.Component {
  state = { count: 1 }
  componentDidMount() {
    this.setState({ count: this.state.count++ }) 
    this.setState({ count: this.state.count + 1 })
    this.setState({ count: this.state.count + 2 })
    console.log('count1', this.state.count); //  ??1
    // 使用定时器
     setTimeout(() => {
      console.log('count2', this.state.count) // ??2
    })
  }
  handleClick = () => {
    this.setState(({ count }) => {
      console.log('count3', count) // ?? 3
      return { count: count + 1}
    })
	console.log('count4', this.state.count) //
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值