前言:最近在項目中遇到一個問題,就是使用ant的tabs組件切換tab時候遇到閃爍、抖動問題。
苦思幾天,也沒解決,沒想到本質問題。直到昨晚同事也遇到這個問題,發現不管是ant vue還是ant react都有這個問題,上網一查確實有相同經歷的小伙伴。
發現根本問題:當切換時候去有請求數據就會出現抖動問題,因為請求數據時候,有觸發setState導致state更新,繼而導致class組件中的state頻繁更新(我們知道class組件state中某個值變化時候會導致state多次更新,從而觸發頁面渲染,也就是說其實是多次頻繁渲染導致的問題)。
上面截圖的每一行selectKey都代表着tabs組件重新渲染一次,每次重新渲染時候,組件重新觸發組件的動畫效果(這里其實可以關閉動畫效果來解決,但是不推薦),從而變成頻繁抖動。
最后,整理下思路,把這個問題解決。
解決辦法:使用hook組件中的memo方法來解決
把Tabs部分抽出來寫成單獨的hook函數組件,然后用memo方法來控制這個selectKey在值不變的前提下組件只進行一次渲染。
關於hook組件的memo知識,可以查看下我的這篇文章 https://www.cnblogs.com/seemoon/p/12792987.html