gpt4 book ai didi

javascript - For 循环仅适用于带有 React 钩子(Hook)的第二个循环

转载 作者:行者123 更新时间:2023-11-29 10:26:34 24 4
gpt4 key购买 nike

我有一个项目,我要添加标签,类似于这个网站。我想先检查用户是否已经选择了标签。我有一个 for 循环来查看添加的标签是否等于已经存在的标签。

如果我创建一个名为 Jack 的标签,它就可以正常工作。如果我创建另一个名为 Jack 的标签,现在我有两个 Jack(不好)。在第三次尝试时,它没有添加另一个 Jack(很好。)

这是我的相关代码。我也添加了控制台。在第三次尝试之前,我的 useState setTagAlreadyThere on 一直被忽略,而在第二次尝试时它应该变为真。我在这里做错了什么?

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 jack
postarticle.tsx:64 false
postarticle.tsx:69 ["jack"]
postarticle.tsx:72 jack
postarticle.tsx:75 jack
postarticle.tsx:76 jack
postarticle.tsx:78 false
postarticle.tsx:81 false
postarticle.tsx:84 ["jack"]
post.tsx:6 {}
postarticle.tsx:92 (2) ["jack", "jack"]
post.tsx:6 {}
postarticle.tsx:

92

最佳答案

没有冒犯,但你的代码有很多不必要的东西。

那么为什么会这样。因为你的tagAlreadyThere还没有更新。你正在检查它是否有值(value)。

const gatherTags = (tags) => {
if (!tagsAdded.inlcudes(tags)) {
setTagsAdded([...tagsAdded, tags]);
setPostTag('')
}
}

不需要 const [tagAlreadyThere, setTagAlreadyThere] = useState(false)

关于javascript - For 循环仅适用于带有 React 钩子(Hook)的第二个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57734961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com