【发布时间】:2021-04-26 10:58:57
【问题描述】:
我正在制作一个非常简单的反应应用程序,其中包含基本细节作为输入。
我在上下文中有这些表单值。
context.js
import React, { useState } from "react";
export const FormContext = React.createContext();
export function FormProvider({ children }) {
const [formValue, setFormValue] = useState({
basicDetails: {
firstName: "John",
lastName: "Doe",
address: {
city: "city",
zip: "zip"
}
}
});
return (
<FormContext.Provider value={[formValue, setFormValue]}>
{children}
</FormContext.Provider>
);
}
在基本细节组件中,我正在尝试渲染表单,
basicdetails.js
以下代码工作正常
<label htmlFor="firstName">First Name: </label>
<input
type="text"
className="form-control"
id="firstName"
name="firstName"
value={basicDetails.firstName}
onChange={(event) => handleInputChange(event)}
/>
以下代码不起作用
<label htmlFor="lastName">City: </label>
<input
type="text"
id="city"
name="city"
value={basicDetails.address.city}
onChange={(event) => handleInputChange(event)}
/>
原因:
第二个给定输入位于嵌套对象下,即basicDetails.address.city。
我只将 name 属性值设为 city。
basicDetails: {
firstName: "John",
lastName: "Doe",
address: {
city: "city",
zip: "zip"
}
}
但handleInputChange 仅涵盖父级更改。
const handleInputChange = (event) => {
const { name, value } = event.target;
setValue((prev) => {
const basicDetails = { ...prev.basicDetails, [name]: value };
return { ...prev, basicDetails };
});
};
要求:
请帮助我更新包含嵌套对象的表单。basicdetails.address.city .
注意:
现在我有 city 和 zip,但以后它可能会扩展,并且会添加更多的字段。所以我无法对条件检查进行硬编码。
【问题讨论】:
标签: javascript html reactjs