在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  HTML/ 使用react重新設(shè)置state,為什么數(shù)組元素不更新

使用react重新設(shè)置state,為什么數(shù)組元素不更新

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);//
  }

調(diào)用delate方法時(shí),state中的數(shù)組alll不會(huì)改變?yōu)閯h除一個(gè)元素后的arr1。
直接使用setState({alll:arr1})也是同樣的效果,無法改變alll

回答
編輯回答
氕氘氚

你這樣是直接獲取不到更新后的state的,可以把console.log(this.state.alll)放在setState的回調(diào)里。譬如:

this.setState({
   alll:arr1
 },() =>{
   console.log(this.state.alll)
 })
2017年10月31日 08:50
編輯回答
眼雜

你這里應(yīng)該是this'指針的問題,你在constructor中寫一下this.delate=this.delate.bind(this);this.add=this.add.bind(this);試一下,其中你寫在delate函數(shù)中的this.setstate(function(){})感覺怪怪的,

2017年3月29日 05:48