搜索

首页  >  问答  >  正文

无法添加属性identity:该对象无法扩展

当我尝试准备我的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粉338969567P粉338969567439 天前655

全部回复(2)我来回复

  • P粉052724364

    P粉0527243642023-09-20 00:51:29

    也许你应该以不同的方式声明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 || {};

    回复
    0
  • P粉436410586

    P粉4364105862023-09-20 00:05:29

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

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

    回复
    0
  • 取消回复