我有這個useCallback鉤子可以根據一些過濾更新狀態。
const onAcccountChange = useCallback(
(e: React.ChangeEvent < HTMLInputElement > ) => {
if (dataBaseStored.account === getValue('account')) {
onChange(e, {
target: {
name: 'password',
validation: ''
}
});
} else {
onChange(e, {
target: {
name: 'password',
validation: 'required',
value: '?????'
}
});
}
},
[onChange, getValue]
);
我的應用程式有一個用于更新帳戶名稱的輸入欄位。
<Input
label={'account'}
name="account"
value={getValue('account')}
onChange={onAccessKeyHandle}
/>
在這種情況下,如果存盤在資料庫中的帳戶名和 UI 上的帳戶名對應,則將密碼欄位的驗證設定為 on '',否則將其設定為required(檢查輸入欄位是否有值的內部驗證)。但是,getValue('account')在原始值后面回傳一個值。例如,如果資料庫存盤的帳戶是new_account并且我鍵入new_account1,則console.log(getValue('account'))我會得到new_account并且過濾器將命中第一個,of if/else,部分。我很清楚這setState是一個異步方法,這就是獲得這個值的原因。在 a 中記錄值useEffect()是正確的,而在useCallback不是,所以我的過濾無效。
onChange是一個函式,它只setState具有兩個引數(第二個是可選的,可以一次更新 2 個狀態),而 thegetValue()是一個根據名稱回傳狀態的函式。
有沒有辦法獲取內部狀態的最新值useCallback?我怎樣才能使我的過濾作業并通過過濾器相應地改變驗證?
uj5u.com熱心網友回復:
我將getValue('account')進入一個變數并將其作為依賴項添加到您的useCallback, 而不是getValue, 例如:
const account = getValue('account');
const onAcccountChange = useCallback(
(e: React.ChangeEvent < HTMLInputElement > ) => {
if (dataBaseStored.account === account) {
onChange(e, {
target: {
name: 'password',
validation: ''
}
});
} else {
onChange(e, {
target: {
name: 'password',
validation: 'required',
value: '?????'
}
});
}
},
[onChange, account]
);
return <Input
label={'account'}
name="account"
value={account}
onChange={onAccessKeyHandle}
/>
uj5u.com熱心網友回復:
不要使用onChangeandgetValue作為依賴項,使用狀態本身。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408300.html
標籤:
