1 回答

TA貢獻1826條經驗 獲得超6個贊
“設置”操作是異步的。所以當你這樣做時:
setHomeSelect(event.target.value);
exchange_change();
當調用第二個方法時,變量homeSelect沒有改變。當邏輯完成處理并且組件準備重新渲染時,它將會發生變化。
更重要的是,這不太像 React:
const exchange_change = () => {
if (homeSelect != 'Home' && hedgeSelect != 'Hedge'){
//enable the symbol dropdown
setDisabled(false);
} else {
//disable the select exchanges dropdown
setDisabled(true);
}
}
當您在此處修改狀態值時,從概念上講,您似乎正在嘗試修改 UI。不。UI 組件只能響應狀態。因此,您可以在“符號”組件中執行此操作,而不是使用該方法:
disabled={homeSelect == 'Home' || hedgeSelect == 'Hedge'}
如果您想將其放入方法中,請將其放入由組件調用的方法中,而不是在重新渲染之前調用。例如:
disabled={() => checkSelects()}
該方法可以是:
const checkSelects = () =>
homeSelect == 'Home' || hedgeSelect == 'Hedge';
但總體而言,請注意此處的操作順序。UI 事件調用的所有邏輯都會被執行,這些邏輯會將狀態更新排隊。然后狀態就會更新。然后組件重新渲染(如果需要)。不要依賴在該邏輯期間更新的狀態。
添加回答
舉報