91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react寫法實例代碼分析

發布時間:2023-03-16 14:49:33 來源:億速云 閱讀:126 作者:iii 欄目:開發技術

這篇文章主要介紹“react寫法實例代碼分析”,在日常操作中,相信很多人在react寫法實例代碼分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”react寫法實例代碼分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

ref的奇怪用法

這是一段初看讓人很困惑的代碼:

function App() {
  const [dom, setDOM] = useState(null);
 
  return <div ref={setDOM}></div>;
}

讓我們來分析下它的作用。

首先,ref有兩種形式(曾經有3種):

  • 形如{current: T}的數據結構

  • 回調函數形式,會在ref更新、銷毀時觸發

例子中的setDOMuseStatedispatch方法,也有兩種調用形式:

  • 直接傳遞更新后的值,比如setDOM(xxx)

  • 傳遞更新狀態的方法,比如setDOM(oldDOM => return /* 一些處理邏輯 */)

在例子中,雖然反常,但ref的第二種形式和dispatch的第二種形式確實是契合的。

也就是說,在例子中傳遞給refsetDOM方法,會在div對應DOM更新、銷毀時執行,那么dom狀態中保存的就是div對應DOM的最新值。

這么做一定程度上實現了感知DOM的實時變化,這是單純使用ref無法具有的能力。

useMemo的奇怪用法

通常我們認為useMemo用來緩存變量propsuseCallback用來緩存函數props

但在實際項目中,如果想通過緩存props的方式達到子組件性能優化的目的,需要同時保證:

  • 所有傳給子組件的props的引用都不變(比如通過useMemo

  • 子組件使用React.memo

類似這樣:

function App({todos, tab}) {
    const visibleTodos = useMemo(
      () => filterTodos(todos, tab),
    [todos, tab]);
    
    return <Todo data={visibleTodos}/>;
}

// 為了達到Todo性能優化的目的
const Todo = React.memo(({data}) => {
  // ...省略邏輯
})

既然useMemo可以緩存變量,為什么不直接緩存組件的返回值呢?類似這樣:

function App({todos, tab}) {
  const visibleTodos = useMemo(
      () => filterTodos(todos, tab),
  [todos, tab]);
  
  return useMemo(() => <Todo data={visibleTodos}/>, [visibleTodos])
}

function Todo({data}) {
  return <p>{data}</p>;
}

如此,需要性能優化的子組件不再需要手動包裹React.memo,只有當useMemo依賴變化后子組件才會重新render

到此,關于“react寫法實例代碼分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

都昌县| 建始县| 石城县| 方城县| 分宜县| 禄劝| 诸城市| 冀州市| 山丹县| 磐安县| 澄迈县| 南和县| 江孜县| 阳新县| 闵行区| 六枝特区| 白山市| 合江县| 大埔区| 宣恩县| 五华县| 赤水市| 克拉玛依市| 乌鲁木齐市| 治县。| 即墨市| 西华县| 芜湖县| 宜黄县| 安徽省| 奎屯市| 大竹县| 浦北县| 德兴市| 阿图什市| 新龙县| 罗定市| 高淳县| 仁寿县| 安泽县| 陇川县|