[英]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.