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

你知不知道React lanes到底咋用???

開發 前端
React中存在不同功能的lane,本文通過講解其中最重要的一種lane來達到讓你理解lane如何使用的目的。

大家好,我卡頌。

很多朋友知道React內部有個lane的概念,但不知道怎么用。

React中存在不同功能的lane,本文通過講解其中最重要的一種lane來達到讓你理解lane如何使用的目的。

lane的含義

想必你對如下代碼再熟悉不過了:

// 對于ClassComponent
onClick() {
this.setState({a: 100})
}
// 對于FunctionComponent
const [updateNum, num] = useState(0);

其中this.setState或updateNum的執行會觸發更新。每個更新對應一個lane。

所以當我們這么寫代碼:

onClick() {
this.setState({a: 100})
this.setState({b: 'hello'})
this.setState({c: true})
}

就會觸發很多更新(這些更新會被合并在一起處理,這里按下不表)。

除了「在一個組件的回調中同時觸發多個更新」,我們也經常會「在不同組件的回調中觸發更新」。

這兩種情況都會產生一種結果:應用中同時存在一到多個lane。

這就是lane的意義:他與更新對應。

lane與lanes

lane與更新對應,更新與狀態對應,狀態與UI對應。

UI的變化通常是多個不同狀態變化的結果,一路追溯回去,就與一到多個lane對應。

如何用一個變量表達「一到多個lane」呢?這就是lanes。

lane與lanes都是「31位二進制」,所以lanes可以很方便的表達「一到多個lane」,比如:

const laneA = 0b0001;
const laneB = 0b0010;
// lanes === 0b0011,lanes包含A和B
const lanes = laneA | laneB;

root.pendingLanes

lanes本身僅僅代表「lane的集合」,他的具體含義需要考慮「構成集合的lane的含義」。

本文講解的lanes叫root.pendingLanes。

對于一個龐大的應用,在同一時間,可能有很多組件會觸發更新,就對應很多lane。他們被統一保存在root.pendingLanes中。

可以認為,root.pendingLanes中記錄了「應用中所有待執行的更新對應的lane」。

工作流程

當觸發更新后,更新對應的lane會附加在root.pendingLanes中,代表「待執行的lane又增加一個」。

接下來React會從root.pendingLanes中選擇一批lane組成lanes,作為本次render時需要考慮的lanes(這批lanes對于不同組件來說,對應不同更新,最終對應UI的變化)。

接下來開始每個組件的render。

我們知道,組件render時獲取的狀態就是組件當前狀態,而狀態的值最終與lane相關。所以,這一步是消費lane獲取狀態的過程。

最后,當頁面完成渲染,root.pendingLanes中會移除「本次render時使用的lanes」(即上一步消費的lane)。

如此反復,直到root.pendingLanes為空。這就是root.pendingLanes的工作流程。

總結

root.pendingLanes只是眾多lanes之一,但他關系到React整個更新流程。

其他lanes都是在這個流程中的某些部分發揮作用。

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

2024-04-03 10:24:01

e.targetDOM元素

2022-04-24 15:30:51

前端Javascript

2015-10-09 08:57:21

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2020-08-10 07:58:18

異步編程調用

2010-08-23 09:56:09

Java性能監控

2011-09-15 17:10:41

2009-12-10 09:37:43

2022-10-13 11:48:37

Web共享機制操作系統

2021-02-01 23:23:39

FiddlerCharlesWeb

2015-06-11 16:48:46

2016-07-22 17:55:07

云計算

2021-10-17 13:10:56

函數TypeScript泛型

2020-08-11 11:20:49

Linux命令使用技巧

2015-06-19 13:54:49

2021-12-22 09:08:39

JSON.stringJavaScript字符串

2021-12-29 11:38:59

JS前端沙箱

2012-11-23 10:57:44

Shell

2022-11-04 08:19:18

gRPC框架項目
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本在线综合 | av手机免费在线观看 | 在线观看久草 | 成在线人视频免费视频 | 国产精品视频网站 | 在线视频一区二区 | 国产一区二区三区在线观看免费 | 男人久久天堂 | 国产aⅴ爽av久久久久久久 | 国产精品国色综合久久 | 日韩不卡一二区 | 91成人在线视频 | 中文字幕在线视频网站 | 九九精品视频在线 | 欧美日韩在线免费观看 | 一区二区三区四区不卡 | 久久综合欧美 | 亚洲精品二区 | 精品av天堂毛片久久久借种 | 中文字幕日韩欧美一区二区三区 | 久久久久无码国产精品一区 | 日韩精品在线网站 | 福利在线看 | 亚洲精品4 | 国产精品99久久久久久宅男 | 精品国产乱码一区二区三区 | 色999日韩 | 成人午夜毛片 | 亚洲欧美日韩在线不卡 | 香蕉视频在线播放 | 久久中文字幕av | 午夜丁香视频在线观看 | 久在线 | 天堂成人av | 国产精品爱久久久久久久 | 亚洲一二三区av | 超碰在线国产 | 亚洲精品国产第一综合99久久 | 中文字幕在线观看精品 | 亚洲欧美日韩中文字幕一区二区三区 | 欧洲一区二区在线 |