Web_Design 板


LINE

範例如下: https://stackblitz.com/edit/react-gv3phw?file=index.js 兩個DIV區塊,當滑鼠移入的時候顯示該區塊的文字, 滑鼠移出的時候隱藏該區塊的文字 可是實際做的時候發現 當單一區塊移入移出都沒有問題 可是從左區塊移入右區塊 卻發現文字怎麼都顯示 正常應該頁面上只會有一個顯示 於是下了個console.log看結果發現 原本預期的步驟是 enter render leave render enter render leave render 但是跑出來是 enter render leave enter render leave render 沒錯~中間少了個render造成結果不正確 但一直想不到是為什麼? 我在onMouseEnter跟onMouseLeave都有下setState 為何從區塊移到另一個區塊時 卻沒有發生render? --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.70.222.22 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Web_Design/M.1572278815.A.5AC.html
1F:→ Hevak: 因為 setState 不是同步的,而且會 batch 在一起 10/29 00:43
2F:→ Hevak: ^文件: https://bit.ly/2NmOrBx 10/29 00:43
4F:→ Hevak: 照文件修好之後像上面這樣,應該是你要的結果,參考看看 10/29 00:48
5F:→ Hevak: 如果你的 setState 會依賴於上一個 state,那就應該改用 10/29 00:48
6F:→ Hevak: this.setState((state,props) => newState) 這種形式去寫 10/29 00:49
7F:→ Hevak: 才可以正常運算,不然會遇到很多先後順序和 batch 的問題 10/29 00:49
8F:→ Hevak: 依賴於上一個 state: 比方說你先取用了 this.state 然後再 10/29 00:49
9F:→ Hevak: 運算再把運算結果丟去 this.setState({}) 10/29 00:50
10F:→ Hevak: 這種寫法就會有問題 10/29 00:50
11F:→ Hevak: 取用上一個 state, props 的東西都應該寫在 this.setState( 10/29 00:51
12F:→ Hevak: (state, props) => 的這個 function 裡面) 10/29 00:51
謝謝大大~再請問一個問題 當我從左區塊移入右區塊的時候 到底是左區塊的onMouseLeave先觸發還是右區塊的onMouseEnter先觸發 因為仔細想了一下順序 (左區塊移入→移到右區塊→移出右區塊) f f (初始) f f (初始) t f (左 mouseEnter) t f (左 mouseEnter) f f (左 mouseLeave) ★ t t (右 mouseEnter) f t (右 mouseEnter) f t (左 mouseLeave) f f (右 mouseLeave) f f (右 mouseLeave) 因為★處好像會影響state不同的狀態(雖然最後結果一樣) 然後發現最早問題裡的render狀態 mouseEnter跟mouseLeave會有一處沒render的那個部分 恰好是這個瞬間 那不就好在沒render,所以最後結果是相同 還是說那個瞬間因為是非同步執行,所以是同時發生的 ※ 編輯: ctah (122.116.84.179 臺灣), 10/29/2019 09:36:00 ※ 編輯: ctah (122.116.84.179 臺灣), 10/29/2019 09:41:57
13F:→ y3k: 用hook會比較穩 https://stackblitz.com/edit/react-v6f1aa 10/29 12:27
14F:→ Hevak: 那個順序其實不太重要,面對確定會有非同步的情形(例如set 10/30 05:36
15F:→ Hevak: State)的設計的重點是使用不管順序怎樣都沒差的寫法 10/30 05:36







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP