javascript - 反应 setState 钩子更新一个先前的值
问题描述
我有反应js和asp.net核心应用程序,onform提交我正在尝试填写一些主数据和详细数据(在aray中)。问题是,setState更新了一个先前的值,当我按两次提交按钮时,我的后端 asp.net web api 方法被命中。任何人都可以告诉我更新状态的正确方法是什么,以便我可以在第一次点击时提交正确的数据。我正在从 handleSubmit 函数调用另一个函数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
- 我
values
在 useEffect 中传递了 as 依赖项。- 因此,您将获得的最新更新值
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]
});
}
推荐阅读
- apache-kafka - KStream/KTable join中的Kafka Stream时间戳同步
- amazon-web-services - AWS 子网 CIDR 冲突
- php - 使用命名空间提取 SimpleXML 属性
- swift - Xcode Swift 模板Lower Camel Case
- rust - 将换行符附加到 Hyper Body 结构
- excel - 我必须在excel中将utc时间转换为ist
- vue.js - 如何解决安装 vue native 的问题?
- php - 使用 PHP-FFMpeg 调整视频大小并保留编解码器
- git - 为什么我不能将更改推送到这个最新的 Git 子树?
- postgresql - 在 hql 中选择新的子查询列表