javascript - 反应 onChange 不更新状态
问题描述
我正在创建一个简单的登录表单,并且我正在保存用户信息以在他们键入时进行说明。但是,该值未按预期注册状态。
这是用户状态
const [user, setUser] = useState({
firstName: '',
lastName: '',
email: ''
});
这是输入组件
export function Input({ id, placeholder, autoComplete, type, name, label, value, handleInputChange }) {
return (
<div className="form-input">
<label className="form-label" htmlFor={id}>{label}</label>
<input
placeholder={placeholder}
autoComplete={autoComplete}
id={id}
type={type}
name={name}
value={value}
onChange={handleInputChange}
/>
</div>
)
}
这是传入输入组件的handleInputChange函数
function handleInputChange(event) {
const { name, value } = event.target;
setUser({ ...user, [name]: value });
}
这是在父组件中使用输入组件之一的方式
<Input
id="first-name"
placeholder="Charlie"
autoComplete="given-name"
type="text"
name="firstName"
label="First Name"
value={user.firstName}
handleInputChange={handleInputChange}
/>
以下是我目前看过的一些资源:
解决方案
我建议为每个输入字段创建一个状态:
export function Form({ addItem }) {
const [name, setName] = useState('');
return (
<form>
<Input
id="first-name"
placeholder="Charlie"
autoComplete="given-name"
type="text"
name="firstName"
label="First Name"
value={user.firstName}
handleInputChange={(event) => setName(event.target.value)}
/>
</form>
);
}
推荐阅读
- laravel - laravel dompdf 未定义类型 'PDF'
- mysql - django 设置文件中的数据库选项不起作用
- ceph - cephadm:无法将节点添加到 ceph 集群(错误 EINVAL:无法连接到主机)
- javascript - 如何让浏览器检测输入字段值的变化?
- ios - 自定义 tabview 标题栏
- wordpress - 重力形式:在元框中打印条目信息(不只是默认布局显示)
- alibaba-cloud - Harbor 向阿里巴巴 ACR 推送镜像失败
- javascript - 如何在下拉选择中获取数字值并从所选值创建元素输入文本框?
- javascript - 正则表达式:仅在后跟任何字符时替换空格否则修剪
- python - 日志记录级别是信息,但只显示警告。Python 日志记录