![](/img/trans.png)
[英]React+typescript : How to change the state if I take it in as an array?
[英]Cannot change state interface in react+typescript
在下面的代碼中,出現編譯錯誤,我無法在closeLeftCol中更改狀態: Cannot assign to leftWidth because it is a constant or read only property
:
interface ILayoutState{
rightClassName: string,
leftClassName: string,
leftWidth: string,
rightWidth : string
}
export default class Layout extends React.Component<undefined, ILayoutState> {
constructor(props) {
super(props);
this.state = {
rightClassName: "right-col slide-in", leftClassName: "left-col slide-in", leftWidth: '' ,rightWidth : '' };
}
closeLeftCol() {
this.state.leftWidth = "0";
this.state.rightWidth = "100%";
this.state.leftClassName += " hideme";
this.state.rightClassName += " full";
this.forceUpdate();
}
render() {...}
}
切勿直接更改this.state ,始終使用setState更新state
值。
像這樣寫:
closeLeftCol() {
this.setState(prevState => ({
leftWidth : "0",
rightWidth : "100%",
leftClassName : prevState.leftClassName + " hideme",
rightClassName : prevState.rightClassName + " full"
}));
}
然后在其他Places constructor
,則需要調用setState
方法來更改state
。
closeLeftCol() {
this.setState({
//change state here
leftWidth: "0",
rightWidth: "100%",
leftClassName: this.state.leftClassName + " hideme",
rightClassName: this.state.rightClassName + " full"
})
//or use this way
this.setState((prevState)=>{
return {
//change state here
leftWidth: "0",
rightWidth: "100%",
leftClassName: prevState.leftClassName + " hideme",
rightClassName: prevState.rightClassName + " full"
}
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.