亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

For 循環僅適用于帶有 React 鉤子的第二個循環

For 循環僅適用于帶有 React 鉤子的第二個循環

慕桂英546537 2021-09-30 17:05:14
我有一個項目要添加標簽,類似于這個站點。我想首先檢查用戶是否已經選擇了標簽。我有一個 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)


查看完整回答
反對 回復 2021-09-30
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

我會告訴你為什么這段代碼會導致很多問題,沒有冒犯的意思。

首先是你在循環中同步調用一個鉤子,因為React.useState鉤子是異步的,就像基于類的this.setState一樣,它批量更新以獲得性能。

我在代碼沙盒上有一個例子:調用鉤子同步和異步

其次,如果您的新狀態是從先前狀態計算出來的,請使用回調樣式,因為您可以訪問更新后的先前狀態,例如:

setTagsAdded(prevTagsAdded => [...prevTagsAdded, tags])

您可以在此處查看文檔:功能更新

希望這可以幫助!


查看完整回答
反對 回復 2021-09-30
  • 2 回答
  • 0 關注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號