React高階元件在業務場景下的應用

2021-08-20 14:44:51 字數 1330 閱讀 9274

在參與beisencloud和pagebuilder的對接任務中,出現了這樣乙個問題:有兩個元件同時關聯了同乙個屬性元件,並且在constructorcomponentdidmount內等做了一些初始化操作,當在這兩個元件之間切換的時候,由於屬性元件已經被首次render了,所以只進行了diff演算法,並沒有重新生成乙個新的元件例項,從而導致了屬性元件沒有同步更新

當然,我們可以在屬性元件內新增componentwillreceiveprops生命週期方法,通過nextprops上的引數,將constructor或者componentdidmount內的初始化配置邏輯重新走一遍

然而,這涉及到乙個問題:如果我們開發的很多屬性元件,都有這個問題,那我們不得不在每個元件內部都實現一遍這樣的邏輯,開發和維護的成本是很高的

在使用componentwillreceiveprops的時候,遇到乙個問題需要注意下:在該方法之內,render之前呼叫的所有同步操作,通過this.props訪問到的props都是舊的資料

既然這邏輯是需要在多處復用的,那我們就需要將這部分邏輯抽離出來,放在高階元件內完成,在需要的地方,通過該高階元件裝飾一下即可

該高階元件接收乙個條件方法,在componentwillreceiveprops生命週期方法中,將nextpropsthis.props暴露給條件方法,通過返回值用來控制是否需要重新例項化target

高階元件內部**實現如下

//高階元件,解決屬性元件不重新整理的問題

import react, from 'react'

export default conditionalfun => target => class

decorator

extends

component

} componentwillreceiveprops (nextprops) )

} else )

}} render () = this.state;

if (newinstance) />//新增key,繞過diff,重新生成新的例項

}return

this.props} />

}}

React高階元件

想想以前用原生和jquery的專案,上千行的code映入眼簾,瞬間有種昏死過去的衝動。難以維護,改乙個bug可能出現n個bug,真的是很痛苦。於是乎元件化成為了當前前端開發的主流技術。angular vue和react很好的幫我們實現了元件化。但是我們常常也會遇到一種情況,就是兩個元件往往有很多的重...

react高階元件

基本概念 函式可以作為引數被傳遞 函式可以作為返回值輸出 元件作為引數被傳遞,返回值是乙個元件 高階元件是乙個函式 案例 將a元件作為公共元件,bc元件作為a函式的引數,來共享顯示a元件 此處紅框是a元件,紅框裡左邊內容為b元件,右邊內容為c元件 1.建立公共的a元件 將元件a封裝成乙個函式,接收乙...

React 高階元件

高階元件 high order component,hoc 輸入 react 元件 輸出 react 元件 高階元件的作用主要是用來加強元件,通過把基礎元件拆分成很小的粒度,通過高階元件進行增強並返回,以此提高復用性。比如需要開發乙個訊息框,一開始只需要乙個模態框能夠顯示訊息就可以。後來需要多增加 ...