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;

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM