无法添加属性identity:该对象无法扩展
P粉338969567
P粉338969567 2023-09-19 13:41:04
0
2
596

当我尝试准备我的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')));
  };

我看到了许多类似的问题,但没有找到正确的答案。 你有什么想法吗? 谢谢

P粉338969567
P粉338969567

全部回复(2)
P粉052724364

也许你应该以不同的方式声明prepareBody对象?

const prepareBody ={
case: {
    identity: {
        title: null,
        firstName: null,
        lastName: null
    },
    type: null
},
...values.customerCase

}

并且不要忘记检查对象中的属性:

values?.customerCase?.customer?.contact?.title

或者使用解构:

const {
customerCase: {
    customer: {
        contact: {
            title,
            firstName,
            lastName
        }
    }
}

} = values || {};

P粉436410586

你从 formik 库中获取的表单值是 不可扩展的。当你执行 const prepareBody = { ...values.customerCase}; 时,你创建了一个对象,其中包含所有 原始值 的副本,但是对于非原始值(比如对象)的引用被添加进去了,这就是为什么你无法扩展它的原因。

要能够修改它,你需要创建一个 深拷贝values.customerCase。现在,Javascript 标准提供了 structuredClone 方法来帮助你实现这一点。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!