反应更新嵌套对象状态

React update nested object state

在我的一个 React 项目中,我的初始状态如下:

 const initialValues = {
    en: {
      notificationTitle: "",
      notificationSubTitle: "",
    },
    hi: {
      notificationTitle: "",
      notificationSubTitle: "",
    },
    webUrl: "",
  };

  const [formData, setFormData] = useState(initialValues);

我将此状态作为道具传递给子组件,我将它们用作像这样的选项卡

{selectedTab === "EnNotification" ? (
        <EnNotification
          formData={formData}
          setFormData={setFormData}
        />
      ) : (
        <HiNotification
          formData={formData}
          setFormData={setFormData}
        />
      )}

当我在一个选项卡中输入数据时假设在 EnNotification 选项卡中状态更新但是当我尝试切换选项卡时它给我以下错误:

TypeError: Cannot read properties of undefined (reading 'notificationTitle')

我的输入组件看起来像:

 <Input
          value={formData.en.notificationSubTitle || ""}
          placeholder="Notification Sub Title"
          onChange={(event) => {
            const tempval = event.target.value;
            setFormData((data) => ({
              en: { ...data.en, notificationSubTitle: tempval },
            }));
          }}
        />

我认为问题出在我能够更新状态的只有一个组件,但我希望它应该从两个组件更新。

谢谢。

更新 formData 状态时,在替换对象 en 之前,您还应该复制当前状态的其余值。试试这个:

setFormData((data) => ({
 ...data,
 en: { ...data.en, notificationSubTitle: tempval },
}));