javascript - 获取选定的值下拉列表 React useSate
问题描述
最初,我将此组件设计为为每个单独的输入提供一个 useState。在意识到这不是添加新输入的最佳方法后,我重构为仅使用一个 useState。我能够获得所有人的价值观,但性别除外。我希望有人能指出我正确的方向。
注意:我意识到它没有获得价值,因为我没有使用 person.gender。我继续尝试为每个输入添加 value={person.gender = "the value I want"}。
const Forms = () => {
const [person, setPerson] = useState({
firstName: "",
lastName: "",
age: "",
gender: "",
email: "",
});
const [people, setPeople] = useState([]);
const handleChange = (e) => {
const name = e.target.name;
const value = e.target.value;
setPerson({ ...person, [name]: value });
};
const handleSubmit = (e) => {
e.preventDefault();
if (person.firstName && person.lastName && person.age && person.email) {
const newPerson = {
...person,
id: new Date().getTime().toString(),
};
setPeople([...people, newPerson]);
setPerson({
firstName: "",
lastName: "",
age: "",
gender: "",
email: "",
});
}
};
console.log(person.gender);
return (
<article>
<h2>Forms</h2>
<form className="form">
<div className="form-control">
<label htmlFor="firstName">First Name:</label>
<input
type="text"
id="firstName"
name="firstName"
value={person.firstName}
onChange={handleChange}
/>
</div>
<div className="form-control">
<label htmlFor="lastName">Last Name:</label>
<input
type="text"
id="LastName"
name="lastName"
value={person.lastName}
onChange={handleChange}
/>
</div>
<div className="form-control">
<label htmlFor="age">Age:</label>
<input
type="text"
id="age"
name="age"
value={person.age}
onChange={handleChange}
/>
</div>
<div className="form-control">
<label htmlFor="gender">Gender:</label>
<select onChange={handleChange} id="gender">
<option name="gender" value="male">
Male
</option>
<option name="gender" value="female">
Female
</option>
<option name="gender" value="prefer not to answer">
prefer not to answer
</option>
</select>
</div>
<div className="form-control">
<label htmlFor="email">Email:</label>
<input
type="email"
id="email"
name="email"
value={person.email}
onChange={handleChange}
/>
</div>
<button type="submit" className="btn" onClick={handleSubmit}>
Submit
</button>
</form>
{people.map((person) => {
const { firstName, lastName, age, gender, email, id } = person;
return (
<div className="item" key={id}>
<h4>
{firstName} {lastName}
</h4>
<span>{age}</span>
<span>{gender}</span>
<p>{email}</p>
</div>
);
})}
</article>
);
};
export default Forms;
谢谢,肖恩
解决方案
您必须将 name 属性赋予 select 元素,而不是其选项
<select name="gender" onChange={handleChange} id="gender">
推荐阅读
- php - PHP - 数组搜索不返回任何内容
- angularjs - 加载子控制器时调用父控制器
- javascript - Selectize.js:使用默认值填充
- javascript - 如何从 Firebase 快照返回数组
- nginx - nginx centos 7服务器多个网站
- c++ - 如何在 C++ 中使用自动换行符实现日志记录宏
- kotlin - Kotlin 语言是如何用 Kotlin 编写的?
- php - PHP 在 0x03 End of Text 后停止在二进制字符串循环中工作
- amazon-web-services - AWS Lambda@Edge 的缓存选项
- javascript - jQuery UI,响应式调整最后一个 div