For循环仅适用于带有React钩子的第二个循环

Lakerskill

我有一个要添加标签的项目,类似于此站点。我想先检查用户是否已经选择了标签。我有一个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 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

塔尔加特·萨里巴耶夫(Talgat Saribayev)

没有冒犯,但您的代码包含许多不必要的内容。

那么为什么会这样呢。因为您tagAlreadyThere尚未更新。您正在检查它的价值。

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

while循环不适用于第二个循环

Java列表的.remove方法仅适用于每个循环中倒数第二个对象

Axios 请求仅适用于第二个请求

React Native 道具不适用于第二个包含

自定义React钩子,仅当添加第二个依赖项时才无限循环。错误或我听不懂的东西?

在带有嵌套enumerate()的for循环中添加第二个参数有什么作用?

第二个FOR循环被跳过

第二个 for 循环的输出

嵌套while循环问题,第二个循环仅循环一次并停止

即使提供了第二个参数,useEffect钩子也会运行无限循环

第二个html文件上的按钮不适用于Flask

AdjustResize 不适用于第二个 EditText

Angular 1 ng模型不适用于第二个输入字段

NOPASSWD选项不适用于第二个命令

休眠条件setReadOnly不适用于第二个查询

Html/CSS/Javascript:弹出 onclick 不适用于第二个 div

malloc 不适用于列表的第二个元素

htaccess第二个重写规则不适用于生产

为什么第二个参数不适用于strtol?

For循环运行两次,但其中的ArrayAdapter仅获得第二个结果

正则表达式搜索功能仅适用于第一列,而仅适用于其他列的第二个或以后的单词

在第二个 if 语句中循环相同的数据

为什么第二个for循环不执行?

从第二个元素开始循环-Shell脚本

第二个for循环未执行

jQuery Slider空第二个循环

从forEach循环的第二个项目开始

SSLEngine握手股票在第二个循环

Realloc 在第二个循环中停止程序