新聞中心
大家好,我卡頌。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),高縣企業(yè)網(wǎng)站建設(shè),高縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,高縣網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,高縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
很多朋友知道React內(nèi)部有個lane的概念,但不知道怎么用。
React中存在不同功能的lane,本文通過講解其中最重要的一種lane來達到讓你理解lane如何使用的目的。
lane的含義
想必你對如下代碼再熟悉不過了:
// 對于ClassComponent
onClick() {
this.setState({a: 100})
}
// 對于FunctionComponent
const [updateNum, num] = useState(0);
其中this.setState或updateNum的執(zhí)行會觸發(fā)更新。每個更新對應(yīng)一個lane。
所以當我們這么寫代碼:
onClick() {
this.setState({a: 100})
this.setState({b: 'hello'})
this.setState({c: true})
}就會觸發(fā)很多更新(這些更新會被合并在一起處理,這里按下不表)。
除了「在一個組件的回調(diào)中同時觸發(fā)多個更新」,我們也經(jīng)常會「在不同組件的回調(diào)中觸發(fā)更新」。
這兩種情況都會產(chǎn)生一種結(jié)果:應(yīng)用中同時存在一到多個lane。
這就是lane的意義:他與更新對應(yīng)。
lane與lanes
lane與更新對應(yīng),更新與狀態(tài)對應(yīng),狀態(tài)與UI對應(yīng)。
UI的變化通常是多個不同狀態(tài)變化的結(jié)果,一路追溯回去,就與一到多個lane對應(yīng)。
如何用一個變量表達「一到多個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的集合」,他的具體含義需要考慮「構(gòu)成集合的lane的含義」。
本文講解的lanes叫root.pendingLanes。
對于一個龐大的應(yīng)用,在同一時間,可能有很多組件會觸發(fā)更新,就對應(yīng)很多l(xiāng)ane。他們被統(tǒng)一保存在root.pendingLanes中。
可以認為,root.pendingLanes中記錄了「應(yīng)用中所有待執(zhí)行的更新對應(yīng)的lane」。
工作流程
當觸發(fā)更新后,更新對應(yīng)的lane會附加在root.pendingLanes中,代表「待執(zhí)行的lane又增加一個」。
接下來React會從root.pendingLanes中選擇一批lane組成lanes,作為本次render時需要考慮的lanes(這批lanes對于不同組件來說,對應(yīng)不同更新,最終對應(yīng)UI的變化)。
接下來開始每個組件的render。
我們知道,組件render時獲取的狀態(tài)就是組件當前狀態(tài),而狀態(tài)的值最終與lane相關(guān)。所以,這一步是消費lane獲取狀態(tài)的過程。
最后,當頁面完成渲染,root.pendingLanes中會移除「本次render時使用的lanes」(即上一步消費的lane)。
如此反復(fù),直到root.pendingLanes為空。這就是root.pendingLanes的工作流程。
總結(jié)
root.pendingLanes只是眾多l(xiāng)anes之一,但他關(guān)系到React整個更新流程。
其他lanes都是在這個流程中的某些部分發(fā)揮作用。
文章標題:你知不知道Reactlanes到底咋用?。?
網(wǎng)頁地址:http://www.dlmjj.cn/article/dpgococ.html


咨詢
建站咨詢
