reactjs - 用于检查数组中是否存在值的 React hooks 每次都会给出一个错误的答案
问题描述
我有一个简单的电话簿,它应该检查姓名是否存在于“人”数组中。我使用了person.map 和includes()。谁能解释为什么这段代码给出了一次“false”,当值应该是“true”时,即名称存在于 person 数组中?它每次都这样做,但只有一次。
// Get a hook function
const {useState} = React;
const App = () => {
const [person, setPerson] = useState([{ name: "John Doe" }]);
const [newName, setName] = useState("");
const addName = (event) => {
event.preventDefault();
const nameObject = { name: newName };
let mapped = person.map((ele) => ele.name);
let found = mapped.includes(newName);
console.log("found it? ", found);
};
const handleNameChange = (event) => {
setName(event.target.value);
};
return (
<form onSubmit={addName}>
<div>
name
<input value={newName} onChange={handleNameChange} />
</div>
<div>
<button type="submit">add</button>
</div>
</form>
);
};
ReactDOM.render(
<App />,
document.getElementById("root")
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
<div id="root"/>
解决方案
当您想将项目添加到数组并更改状态时,您必须使用以下方式之一:
setPerson(person => person.concat(nameObject)) with .concat()
setPerson(person => [...person, nameObject]) with … spread
推荐阅读
- python - 使用 Python 和 Pandas 从两列中输出随机行
- mariadb - MariaDB 在创建外键时抛出语法错误
- powerbi - 如何使切片器仅影响 Power BI 中同一页面上的一个表
- laravel - Laravel迁移,列varchar到整数并保留数据
- tensorflow - Tensorflow 1.15 中的 MultiHeadAttention
- python - 如何遍历一次发送 1000 条记录的数据帧,直到达到总共 30K 条记录
- javascript - 如何在辅助函数中访问上下文 API 方法?
- javascript - 我将如何为随着时间的推移从一个阶段变为另一个阶段并淡入和淡出以及最后一个阶段在消失之前在屏幕上停留更长时间的阶段进行动画处理
- python - 使用 Pandas / AWS 清理用户输入城市名称的最简单方法
- algorithm - 是否有软件设计模式来管理具有多种变体的顺序算法?