我有一个项目要添加标签,类似于这个站点。我想首先检查用户是否已经选择了标签。我有一个 for 循环来查看添加的标签是否等于已经存在的标签。如果我制作一个名为 Jack 的标签,它会工作得很好。如果我创建另一个名为 Jack 的标签,现在我有两个 Jacks(不好)。在第三次尝试时,它不会添加另一个 Jack(很好。)这是我的相关代码。我也添加了控制台。我的 useState setTagAlreadyThere on 被忽略,直到第三次尝试,当它应该在第二次尝试时变为 true。我在这里做错了什么?const [tagsFound, setTagsFound] = useState([])const [tagsAdded, setTagsAdded] = useState([]) const [tagAlreadyThere, setTagAlreadyThere] = useState(false)const gatherTags = (tags) => { setTagAlreadyThere(false) console.log(tagAlreadyThere) if (tagsAdded.length === 0) { setTagsAdded([...tagsAdded, tags]); } else { console.log(tagsAdded) for (let i = 0; i < tagsAdded.length; i++) { console.log(tagsAdded[i]) if (tags === tagsAdded[i]) { console.log(tagsAdded[i]) console.log(tags) setTagAlreadyThere(true) console.log(tagAlreadyThere) } } console.log(tagAlreadyThere) if (tagAlreadyThere === false) { setTagsAdded([...tagsAdded, tags]); console.log(tagsAdded) } else { return } } setPostTag('')}安慰。TagAdder.tsx:9 jackpostarticle.tsx:64 falsepostarticle.tsx:69 ["jack"]postarticle.tsx:72 jackpostarticle.tsx:75 jackpostarticle.tsx:76 jackpostarticle.tsx:78 falsepostarticle.tsx:81 falsepostarticle.tsx:84 ["jack"]post.tsx:6 {}postarticle.tsx:92 (2) ["jack", "jack"]post.tsx:6 {}postarticle.tsx:92
2 回答
慕森王
TA贡献1777条经验 获得超3个赞
无意冒犯,但你的代码有很多不必要的东西。
那么为什么会这样。因为你tagAlreadyThere还没有更新。你正在检查它是否有价值。
const gatherTags = (tags) => {
if (!tagsAdded.inlcudes(tags)) {
setTagsAdded([...tagsAdded, tags]);
setPostTag('')
}
}
不需要 const [tagAlreadyThere, setTagAlreadyThere] = useState(false)
添加回答
举报
0/150
提交
取消