1、react 解决this.setState修改数据异步问题

解决异步:

1、nextState(推荐)

import React from 'react'
class Home extends React.Component{
    constructor(props){
        super(props);
        this.state = {
            data :0
        }
    }
    componentDidMount(){
       this.timer = setInterval(()=>{this.setState({date:new Date()})},1000)
    }
    componentWillMount(){
        clearInterval(this.timer)
    }
    render(){
        return(
        <React.Fragment>
            <p>{this.state.data}</p>
            <button onClick={this.add}>点击</button>
        </React.Fragment>
        )
    }
    // 异步问题复现
    // add = ()=>{
    //     this.setState({
    //         data:this.state.data+1
    //     })
    //     this.setState({
    //         data:this.state.data+2
    //     })
    //     console.log(`点击${this.state.data}`);
    // }
    // 解决方法一
    add = ()=>{
        this.setState(nextState=>({data:nextState.data+1}))
        this.setState(nextState=>({data:nextState.data+2}))
        console.log(`点击${this.state.data}`)
    }
 
   //方法二setTimeout():
        add = ()=>{
            setTimeout(()=>{
                this.setState({data:this.state.data+1})
                this.setState({data:this.state.data+2})
            },0)
        }
  //方法三事件委托:
          
          componentDidMount(){
             this.timer = setInterval(()=>{this.setState({date:new Date()})},1000);
             document.getElementsByTagName("button")[0].addEventListener('click',
               ()=>{
                  this.setState({
                     data:this.state.data+1
                  })
                 console.log(`点击${this.state.data}`)  
               })
          }
export default Home;

 

posted @ 2020-08-26 00:29  雪糕战士  阅读(1507)  评论(0编辑  收藏  举报