react 深入异步setState

(1)多个setState一起调用会被合并成一个批处理,相同属性只会保留最后一次的结果

(2)若setState有回调函数,则会在setState的所有异步操作执行完成后才执行回调

(3)将异步setState同步化
	方式一:
		通过回调函数的形式
		this.setState({xx},()=>{
			获取state进行操作
			this.setState({xx},()=>{
				获取state进行操作
			})
		})
	
	方式二:
		使用函数式setState
		this.setState((preState,props)=>{
			return {
				x:preState.xx操作
			}
		})
		
		this.setState((preState,props)=>{
			return {
				x:preState.xx操作
			}
		})
		此时拿到的state值是在上一次基础上的,即同步化

代码示例:

import React,{useState,useEffect,useCallback} from 'react';
import './App.css';

class App extends React.Component{


  constructor(props)
  {
    super(props);
    this.state={
      count:0,
      name:'jeff',
      address:'bj'
    } 
  }
  componentDidMount()
  {
  	//回调
    // this.setState({
    //   count:this.state.count+1
    // },()=>{
    //   this.setState({
    //     count:this.state.count+1
    //   },()=>{
    //     this.setState({
    //       count:this.state.count+1
    //     })
    //   })
    // })
	
	//函数式
    // this.setState((prevState,props)=>{
    //   return {count:prevState.count+1}
    // })
    // this.setState((prevState,props)=>{
    //   return {count:prevState.count+1}
    // })
    // this.setState((prevState,props)=>{
    //   return {count:prevState.count+1}
    // })
    // this.setState((prevState,props)=>({count:this.prevState.count+1}))
	
	//多个异步setState会被合并成一个,且保留最后一次,所有异步操作执行完后才会执行回调
    this.setState({},()=>{
      console.log(this.state.name);
    })

     this.setState({
       count:this.state.count+1,
       address:'tj',
       name:'hh'
     })
     
     this.setState({
      count:this.state.count+10,
      name:'ah'
    })
  }


    render()
    {
        return(

            <div>
              {this.state.count}      
              {this.state.name}    
              {this.state.address}             
            </div>
        )
    }
}

export default App
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值