成人免费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前端

2020-09-14 15:57:53

Vue和React

2022-05-09 10:47:08

登錄SpringSecurity

2009-06-08 20:05:14

Eclipse deb

2020-08-02 22:54:04

Python編程語言開發

2021-07-26 09:00:08

ReactHooks 項目

2021-05-30 07:59:00

String引用類型

2013-04-17 10:34:55

.NET大對象堆

2009-09-14 19:25:09

Ruby form

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開源符號

2021-02-02 16:34:12

useMemo性能優化函數

2018-01-24 18:00:21

LinuxDebianvim

2020-06-22 07:55:31

編程語言

2019-09-21 21:32:34

數據庫SQL分布式

2013-12-02 14:53:20

jQuery插件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲电影成人 | 国产精品成人一区二区三区 | 成人精品一区 | 国产成人精品一区二区三区在线观看 | 在线国产99 | 久久久精品一区 | 自拍视频一区二区三区 | 黄色毛片在线看 | 激情五月综合 | 99视频在线免费观看 | 在线日韩欧美 | 中文字幕在线观看视频网站 | 一区二区三区在线 | 国产精品1区2区 | 日本aⅴ中文字幕 | 精品日韩 | 二区高清 | 色婷婷激情 | av入口 | 99久久久无码国产精品 | 国产精品一区二区av | 日韩视频在线观看一区二区 | 国产精品久久久久久妇女6080 | 国产高清在线观看 | 免费国产视频 | 亚洲高清在线观看 | 日韩视频三区 | 国产精品中文字幕在线 | 一区二区三区四区在线免费观看 | 欧美日韩在线综合 | 91av精品| 亚洲精品一区二区 | 在线观看第一页 | 欧美在线免费 | 99re视频在线观看 | 国产精品污污视频 | 午夜影院| 99视频| 亚洲网在线 | 国产精品一区二区三区四区 | 久久视频免费看 |