当我尝试准备我的POST请求体时,遇到了一个简单的TypeError。
这是我的handleSubmit函数:
const handleSubmit = (values: any, formikHelpers: FormikHelpers<any>) => {
const prepareBody = { ...values.customerCase};
if (type === '1') {
console.log(prepareBody);
prepareBody.case.identity= {}; // 即使我删除这一行也会出错
prepareBody.case.identity.title =
values.customerCase.customer.contact.title;
prepareBody.case.identity.firstName =
values.customerCase.customer.contact.firstName;
prepareBody.case.identity.lastName =
values.customerCase.customer.contact.lastName ;
prepareBody.case.type = type;
}
PostCustomer({
reference: props.reference,
body: prepareBody,
})
.unwrap()
.then(() => {
formikHelpers.resetForm();
history.push('/success');
})
.catch(() => alertToasts('error', t('toast.error')));
};
我看到了许多类似的问题,但没有找到正确的答案。 你有什么想法吗? 谢谢
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
也许你应该以不同的方式声明prepareBody对象?
const prepareBody ={ case: { identity: { title: null, firstName: null, lastName: null }, type: null }, ...values.customerCase}
并且不要忘记检查对象中的属性:
或者使用解构:
const { customerCase: { customer: { contact: { title, firstName, lastName } } }} = values || {};
你从
formik库中获取的表单值是 不可扩展的。当你执行const prepareBody = { ...values.customerCase};时,你创建了一个对象,其中包含所有 原始值 的副本,但是对于非原始值(比如对象)的引用被添加进去了,这就是为什么你无法扩展它的原因。要能够修改它,你需要创建一个 深拷贝 的
values.customerCase。现在,Javascript 标准提供了 structuredClone 方法来帮助你实现这一点。