我試圖參考一個異步函式,但它被執行了。
const Payment = props => {
const [buttonAction, setButtonAction] = useState(null);
useEffect(() => {
if(some true stuff){
// this gets executed instead of being a reference to a function
setButtonAction(() => createSubscription(a ? b : c ));
}
}, [deps...]);
const createSubscription = async (sessionId) => {
// code
}
}
uj5u.com熱心網友回復:
React 的useStatesetter 函式接受:
- 要設定的資料,或
- 使用最新版本的資料呼叫的函式(請參閱檔案中的此處),該函式將回傳要設定的資料
通過將函式傳遞給setButtonAction,您要求 React 使用 的最新值呼叫該函式,buttonAction以便您可以更新它。
您不能直接在狀態中存盤函式,通常沒有理由這樣做(盡管存在邊緣情況)。
一些替代方案:
- 如果您確實需要在狀態中存盤一個函式,請將其包裝在一個物件中。
- 使用
useCallback或useMemo重用函式,僅在其依賴項更改時更新它 - 將其保存在ref 中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/362572.html
標籤:javascript 反应 异步
上一篇:在jQuery中異步獲取json后如何迭代json物件?
下一篇:如何檢查對信號的回應
