我有一個switch-case
聲明類似於此。this.setState不立即更新,當基於當前狀態setState
switch (this.state.someState) {
case "string1":
this.setState({
someState: "string5"
});
break;
case "string2":
this.setState({
someState: "string6"
});
break;
case "string3":
this.setState({
someState: "string7"
});
break;
case "string4":
this.setState({
someState: "string8"
});
break;
default:
this.setState({
someState: "string1"
});
break;
}
問題是它基於之前的狀態而不是當前的狀態設置狀態。
我該如何解決這個問題?
'setState'是異步的。這不僅僅是一個直接的變化 - 它可以與其他呼叫的效率進行分組。改爲使用回調 - 第一個參數是之前的狀態。 – Li357
我建議你重寫你的代碼。 'let someState; switch(this.state.someState){ case「string1」: someState =「string5」; 休息; } this.setState({someState:someState});' – Andrew
這個用例正是設置狀態爲異步的原因。 React將後續調用合併爲一個更新。也許你不想回調,也許你想使用你之前設置的'someState'?例如,你可以從變量中獲得它嗎? – Sulthan