如何将 useState 挂钩传递给父组件并更新对象?
How to pass a useState hook to the parent component and update an object?
我在 React 中有一个用户组件和一个 InputField 组件。我知道我的代码是错误的,但它应该显示我打算做什么。我不想为每个 属性 用户设置多个 useState 挂钩,而是想更新一个用户对象,其中输入字段可以更新用户对象的特定 属性。
const User = () => {
const [user, setUser] = useState({
name: "",
email: "",
});
return (
<>
<InputField
name="name"
value={user.name}
onChange={() => setUser({ ...user, name: value })}
/>
<InputField
name="email"
value={user.email}
onChange={() => setUser({ ...user, email: value })}
/>
</>
);
};
const InputField = ({ name, value }) => {
const [value, setValue] = useState("");
return (
<input
type="text"
id={name}
value={value}
onChange={(e) => setValue(e.target.value)}
/>
);
};
我认为我对 value
道具所做的是正确的,但 onChange
不正确,这是我的问题。我怎样才能将 setValue
传递给用户组件,以便它更新名称或电子邮件?
您没有从 InputField 组件中的道具获得 onChange。
const InputField = ({ name, value, onChange }) => {
return (
<input
type="text"
id={name}
value={value}
onChange={(e) => setValue(e.target.value)}
/>
);
};
然后需要获取子组件传入的值:
<InputField
name="name"
value={user.name}
onChange={(value) => setUser({ ...user, name: value })}
/>
<InputField
name="email"
value={user.email}
onChange={(value) => setUser({ ...user, email: value })}
/>
我认为这应该可以解决。
您需要将 onchange 逻辑移至父组件。因此,您可以在父级中创建一个 onchange 函数并将其传递给输入字段。此外,我只会使用目标名称属性来设置状态,而不是在输入上设置 id。所以像下面这样:
const InputField = ({ name, value, onChange }) => {
return (
<input
type="text"
name={name}
value={value}
onChange={onChange}
/>
);
};
const User = () => {
const [user, setUser] = useState({
name: "",
email: "",
});
const onChange = (e) => {
setUser({
...user,
[e.target.name]: e.target.value
})
}
return (
<>
<InputField
name="name"
value={user.name}
onChange={onChange}
/>
<InputField
name="email"
value={user.email}
onChange={onChange}
/>
</>
);
};
我在 React 中有一个用户组件和一个 InputField 组件。我知道我的代码是错误的,但它应该显示我打算做什么。我不想为每个 属性 用户设置多个 useState 挂钩,而是想更新一个用户对象,其中输入字段可以更新用户对象的特定 属性。
const User = () => {
const [user, setUser] = useState({
name: "",
email: "",
});
return (
<>
<InputField
name="name"
value={user.name}
onChange={() => setUser({ ...user, name: value })}
/>
<InputField
name="email"
value={user.email}
onChange={() => setUser({ ...user, email: value })}
/>
</>
);
};
const InputField = ({ name, value }) => {
const [value, setValue] = useState("");
return (
<input
type="text"
id={name}
value={value}
onChange={(e) => setValue(e.target.value)}
/>
);
};
我认为我对 value
道具所做的是正确的,但 onChange
不正确,这是我的问题。我怎样才能将 setValue
传递给用户组件,以便它更新名称或电子邮件?
您没有从 InputField 组件中的道具获得 onChange。
const InputField = ({ name, value, onChange }) => {
return (
<input
type="text"
id={name}
value={value}
onChange={(e) => setValue(e.target.value)}
/>
);
};
然后需要获取子组件传入的值:
<InputField
name="name"
value={user.name}
onChange={(value) => setUser({ ...user, name: value })}
/>
<InputField
name="email"
value={user.email}
onChange={(value) => setUser({ ...user, email: value })}
/>
我认为这应该可以解决。
您需要将 onchange 逻辑移至父组件。因此,您可以在父级中创建一个 onchange 函数并将其传递给输入字段。此外,我只会使用目标名称属性来设置状态,而不是在输入上设置 id。所以像下面这样:
const InputField = ({ name, value, onChange }) => {
return (
<input
type="text"
name={name}
value={value}
onChange={onChange}
/>
);
};
const User = () => {
const [user, setUser] = useState({
name: "",
email: "",
});
const onChange = (e) => {
setUser({
...user,
[e.target.name]: e.target.value
})
}
return (
<>
<InputField
name="name"
value={user.name}
onChange={onChange}
/>
<InputField
name="email"
value={user.email}
onChange={onChange}
/>
</>
);
};