setState更新状态的两种写法

对象式的setState

setState(stateChange,[callback])

  1. stateChange 为状态改变的对象(该对象可以体现出状态的更改)
  2. callback 是可选的回调函数,它在状态更新完毕后,界面也更新后(render调用后)才被调用
import React, { Component } from 'react'

export default class Demo extends Compontent {
	state = { count: 0 }
	add = () => {
		// 1.获取count值
		const {count} = this.state
		// 2.更新状态(setState是同步的方法,但是引起更新的状态却是异步的)
		this.setState({count: count+1}, ()=>{
			console.log('render调用后调用:', this.state.count)	// render调用后调用:1
		})
		console.log('输出其实是更新前的值:', this.state.count)	// 输出其实是更新前的值:0
	}
	render () {
		return (
			<div>
				<h3>当前值为: {this.state.count}</h3>
				<button onClink={this.add}>+1</button>
			</div>
		)
	}
}

注意:setState是同步的方法,但是引起更新的状态却是异步的

函数式的setState

setState(updater,[callback])

  1. updater 为返回 stateChange 对象的函数
  2. updater 可以接受到 stateprops
  3. callback 是可选的回调函数,它在状态更新完毕后,界面也更新后(render调用后)才被调用
import React, { Component } from 'react'

export default class Demo extends Compontent {
	state = { count: 0 }
	add = () => {
		// 函数式
		this.setState(state => ({count: state.count+1}) )
	}
	render () {
		return (
			<div>
				<h3>当前值为: {this.state.count}</h3>
				<button onClink={this.add}>+1</button>
			</div>
		)
	}
}

总结

  1. 对象式setState是函数式setState的简写方式(语法糖)
  2. 使用原则:

    (1).如果新状态不依赖与原状态 ===> 使用对象方式
    (1).如果新状态依赖与原状态 ===> 使用函数方式
    (1).如果需要在 setState() 执行后获取最新的状态数据,要在callback函数中读取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡小多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值