欢迎使用皮肤 Geek|

雪糕战士

园龄:4年8个月粉丝:0关注:1

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;
复制代码

 

本文作者:雪糕战士

本文链接:https://www.cnblogs.com/nothingness/p/13562821.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   雪糕战士  阅读(1511)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起