簡體   English   中英

使用setState ReactJs更新狀態

[英]Update state with setState ReactJs

我試圖在單擊按鈕時更新狀態變量。但是我的問題是,它使用正確的數據更新一次,然后再次使用構造函數定義的數據更新。

    constructor(props) {
        super(props);
        this.state = {
            popupshow: [{ check: false, id: '' }]

        }
    }

componentDidUpdate(prevProps, prevState) {
         console.log("this.state.popupshow",this.state.popupshow)

    }


Details(type){
   this.state.popupshow[i].id = type
   this.state.popupshow[i].check = true;

   this.setState({ popupshow: this.state.popupshow });
}

render() {
return (
  <a onClick={() => this.Details("Tv Series")}>Update </>
)
}

我的console.log就像下面

在此處輸入圖片說明

我認為您應該重寫類似的詳細功能:

Details(type, i){
   const popupDetail = Object.assign([], this.state.popupshow);
   popupDetail[i].id = type
   popupDetail[i].check = true;

   this.setState({ popupshow: popupDetail });
}

您正在設置popupshow:this.state.popupshow這將導致forceupdate重新渲染組件,因此其值將被重置。

您不應該直接更新React狀態。 您應該始終通過setState方法更新/設置React狀態。

這些行違反了React原則

this.state.popupshow[i].id = type
this.state.popupshow[i].check = true;

如下更新您的Details

Details(type){
   let { popupshow } = this.state;
   let i = 0;
   popupshow[i].id = type
   popupshow[i].check = true;

   this.setState({ popupshow });
}

注意我沒有變量i概念,因此假定為0

我完全同意針對該問題的其他答案,但是,值得注意的是您可能想將函數添加到上下文中。 支持將這些行添加到構造函數的觀點是,每個類的實例僅創建一次新的綁定函數。 您也可以使用

onClick={this.Details.bind(this, "Tv Series")}

或(ES6):

onClick={() => this.Details("Tv Series")}但是每次重新渲染組件時,這兩種方法都會創建一個新函數。

然后也將功能更改為箭頭功能

Details(type, i){
   const popupDetail = Object.assign([], this.state.popupshow);
   popupDetail[i].id = type
   popupDetail[i].check = true;

   this.setState({ popupshow: popupDetail });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM