[英]React setState hook updating one previous value
我已經反應 js 和 asp.net 核心應用程序,onform 提交我正在嘗試填寫一些主數據和詳細數據(在 aray 中)。 問題是, setState更新了一個先前的值,當我按下提交按鈕兩次時,我的后端 asp.net web api 方法被擊中。 任何人都可以告訴我更新 state 的正確方法是什么,以便我可以在第一次點擊時提交正確的數據。 我正在從 handleSubmit function 調用另一個 function addDetailItem來使用 setState 鈎子填充數組。
<form autoComplete="off" noValidate onSubmit = {handleSubmit} >
const handleSubmit = (e) => {
e.preventDefault();
if(validateForm()){
addDetailItem();
props.createPaymentVoucher(values);
}
console.log(values);
}
const addDetailItem = () => {
let x = {
voucherMasterId:values.voucherMasterId,
voucherDetailId:0,
accountCode: values.creditAccountCode,
debit: 0,
credit: values.creditAmount,
remarks: values.fromRemarks,
status: ""
}
setValues({
...values,
voucherDetails: [...values.voucherDetails, x]
});
console.log('voucherDetails: ', values.voucherDetails);
}
這里 setValues 設置值,但第一次單擊它顯示空數組,第二次單擊它顯示必須第一次填充的值。
只需使用useEffect
捕獲值更改
- 我在 useEffect 中將
values
作為依賴項傳遞。- 因此,您將獲得最新更新的
values
- 現在每當
values
發生任何變化時,它都會調用props.createPaymentVoucher
useEffect(() => {
props.createPaymentVoucher(values);
}, [values])
const handleSubmit = (e) => {
e.preventDefault();
if(validateForm()){
addDetailItem();
}
}
const addDetailItem = () => {
let x = {
voucherMasterId:values.voucherMasterId,
voucherDetailId:0,
accountCode: values.creditAccountCode,
debit: 0,
credit: values.creditAmount,
remarks: values.fromRemarks,
status: ""
}
setValues({
...values,
voucherDetails: [...values.voucherDetails, x]
});
}
setState 是異步的 function 因此當您在更新后立即嘗試使用 state 時,它將始終返回以前的值。
因此,不要立即使用 state 值,您可以使用useEffect
或針對您的特定用例遵循以下解決方案。
嘗試:-
const newValues = { ...values, voucherDetails: [...values.voucherDetails, x]};
setValues({ ...newValues });
return newValues;
現在您可以在您的句柄提交handleSubmit
中訪問您的值,如下所示
const updatedValues = addDetailItem();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.