使用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

阅读 4.2k
2 个回答

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

this.setState({
   alll:arr1
 },() =>{
   console.log(this.state.alll)
 })

你这里应该是this'指针的问题,你在constructor中写一下this.delate=this.delate.bind(this);this.add=this.add.bind(this);试一下,其中你写在delate函数中的this.setstate(function(){})感觉怪怪的,

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题