使用react重新设置state,为什么数组元素不更新

constructor(){

    super();

    this.state={

      alll:[],

      values:''

    }

  }

  add(e){

    let arr1 = this.state.alll;

    arr1.push({msg:this.state.values,check1:false});

    this.setState({

      alll:arr1

    })

    // console.log(this.state.alll);

  }

delate(e){

    let index1 = e.target.parentNode.id;

    let arr1 = [];

    for(var i =0;i<this.state.alll.length;i++){

      arr1.push(JSON.parse(JSON.stringify(this.state.alll[i])));

    }

    console.log(arr1);

    arr1.splice(index1,1);

    console.log(arr1);

    this.setState(

      function(){

          return {alll: arr1};

      }

    )

    console.log(this.state.alll);//

  }

调用delate方法时,state中的数组alll不会改变为删除一个元素后的arr1。

直接使用setState({alll:arr1})也是同样的效果,无法改变alll


翻阅古今
浏览 432回答 2
2回答

慕哥6287543

你这样是直接获取不到更新后的state的,可以把console.log(this.state.alll)放在setState的回调里。譬如:this.setState({&nbsp; &nbsp;alll:arr1&nbsp;},() =>{&nbsp; &nbsp;console.log(this.state.alll)&nbsp;})

守着一只汪

你这里应该是this'指针的问题,你在constructor中写一下this.delate=this.delate.bind(this);this.add=this.add.bind(this);试一下,其中你写在delate函数中的this.setstate(function(){})感觉怪怪的,
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript