成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

兩個奇怪的React寫法,你還遇到哪些奇怪的React寫法呢?

開發 前端
雖然React官網用大量篇幅介紹最佳實踐,但因JSX語法的靈活性,所以總是會出現奇奇怪怪的React寫法。

大家好,我卡頌。

雖然React官網用大量篇幅介紹最佳實踐,但因JSX語法的靈活性,所以總是會出現奇奇怪怪的React寫法。

本文介紹2種奇怪(但在某些場景下有意義)的React寫法。

ref的奇怪用法

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

function App() {
const [dom, setDOM] = useState(null);

return <div ref={setDOM}></div>;
}

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

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

  1. 形如{current: T}的數據結構
  2. 回調函數形式,會在ref更新、銷毀時觸發

例子中的setDOM是useState的dispatch方法,也有兩種調用形式:

  1. 直接傳遞更新后的值,比如setDOM(xxx)。
  2. 傳遞更新狀態的方法,比如setDOM(oldDOM => return /* 一些處理邏輯 */)。

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

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

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

useMemo的奇怪用法

通常我們認為useMemo用來緩存變量props,useCallback用來緩存函數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寫法呢?

責任編輯:姜華 來源: 魔術師卡頌
相關推薦

2022-06-10 08:01:17

ReduxReact

2022-02-21 06:02:49

Strve.jsCodepenReact

2021-07-02 05:31:53

ReactSolidJS前端

2022-05-09 10:47:08

登錄SpringSecurity

2020-09-14 15:57:53

Vue和React

2009-06-08 20:05:14

Eclipse deb

2020-08-02 22:54:04

Python編程語言開發

2021-07-26 09:00:08

ReactHooks 項目

2009-09-14 19:25:09

Ruby form

2013-04-17 10:34:55

.NET大對象堆

2021-05-30 07:59:00

String引用類型

2015-08-11 08:51:40

游戲死亡

2024-04-03 08:47:58

React服務端組件Actions

2015-07-13 09:04:10

互聯網設備設備

2020-09-09 07:55:51

TS開源符號

2020-06-22 07:55:31

編程語言

2021-02-02 16:34:12

useMemo性能優化函數

2018-01-24 18:00:21

LinuxDebianvim

2012-06-18 17:01:55

Windows RT微軟

2019-09-21 21:32:34

數據庫SQL分布式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 美国一级黄色片 | 99久久精品国产一区二区三区 | 国产精品第2页 | www.久久国产精品 | 黄色大片免费观看 | 欧美精品一区二区在线观看 | 视频一区二区三区在线观看 | 中文字幕视频在线免费 | 午夜小电影| 久久91精品久久久久久9鸭 | 狠狠干美女 | 国产精品视频播放 | 久久国内 | 国产乱码一二三区精品 | 精品自拍视频在线观看 | 日韩欧美在线观看 | 欧美久久久网站 | 一区二区小视频 | 色狠狠桃花综合 | 久久久精品综合 | 成av在线 | 国产视频三区 | 国产在线一区观看 | 中文字幕中文字幕 | 国产色片 | 久久久久久综合 | 欧美婷婷 | 成人精品一区亚洲午夜久久久 | 国产天堂 | 国产ts人妖另类 | 喷潮网站 | 久久99蜜桃综合影院免费观看 | 欧美最猛性xxxxx亚洲精品 | 国产一区二区三区四区 | 日本三级网站在线 | 黄色男女网站 | 亚洲精品在线免费 | 亚洲精品久久久久avwww潮水 | 波多野结衣一区二区三区在线观看 | 国产99热在线 | 久草电影网 |