掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
隨著現(xiàn)代Web應(yīng)用的重量從后端轉(zhuǎn)移到前端,我們不得不花更多的時間去考慮性能優(yōu)化。在實現(xiàn)條件渲染時也是如此。

從網(wǎng)站建設(shè)到定制行業(yè)解決方案,為提供成都網(wǎng)站制作、網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)服務(wù)體系,各種行業(yè)企業(yè)客戶提供網(wǎng)站建設(shè)解決方案,助力業(yè)務(wù)快速發(fā)展。創(chuàng)新互聯(lián)將不斷加快創(chuàng)新步伐,提供優(yōu)質(zhì)的建站服務(wù)。
所以,試著花適量的時間來優(yōu)化你的代碼,同時盡可能多地推動重用組件。這將幫助你在質(zhì)量和交付時間之間取得適當?shù)钠胶狻?/p>
[[327628]]
我們可以將 if-else 條件邏輯應(yīng)用于React中的JSX。請記住,JSX在執(zhí)行之前已編譯為JS,因此我們實際上是在用JS代碼編寫。
/ Example /
- var globalVar = true
- function App() {
- if(globalVar) {
- return
If Rendering- } else {
- return
Else Rendering- }
- }
/ 性能 /
if-else 語句可能會導(dǎo)致React中的渲染浪費。這在中小型應(yīng)用中可能感覺不到,但在有成百上千組件的大型應(yīng)用中,性能拖累會相當明顯。
讓我們研究以下示例:
根據(jù)條件加載組件A,B,C。
如果 showA prop為真,則渲染A,B,C。如果 showA prop 為假,則跳過A并僅渲染B和C。
這里的問題來自React的差異算法。這個算法是React用來知道何時避免浪費渲染的算法。
在初始 showA 為 true 時,組件將按照其結(jié)構(gòu)A-> B-> C進行渲染。只要 showA 為 true 且其props不變,React就不會重新渲染。
但是,當 showA 變?yōu)?false 時,呈現(xiàn)結(jié)構(gòu)將發(fā)生變化,結(jié)構(gòu)將為B->C?,F(xiàn)在,React會看到一個與之前的結(jié)構(gòu)不同的結(jié)構(gòu),并且會重新渲染(un-mount 和 re-mount)B和C組件,即使它們的props/state保持不變,不需要重新渲染。這是一種浪費的重新渲染。
三元運算符是“if-else”條件的縮寫。第一部分說明條件,第二部分則為返回值(如果為true),最后一部分為返回值(如果為false)。
- condition ? true_cond : false_cond
/ Example /
- let cond = true
- function App() {
- return (
- {cond ?
If Rendering- :
Else Rendering- }
- )
- }
Element變量包含JSX元素,因此可以在React組件中的任何地方使用。Element變量使你的代碼更易于閱讀和理解,因為它消除了組件中的多個return語句。
實施此操作的標準方法:
- function App(props) {
- if(props.loggedIn) {
- return
Logged In- } else {
- return
Not Logged In- }
- }
在上面的組件中,我們有多個return語句。我們在JSX中使用 if-else 來有條件地呈現(xiàn)部分UI。
我們可以使用Element變量來存儲要在條件語句的每個結(jié)果上返回的元素。
/ Example /
- function App(props) {
- let element
- if(props.loggedIn) {
- element =
Logged In- } else {
- element =
Not Logged In- }
- return element
- }
根據(jù) if-else 語句的求值,我們使用 element變量 保存要渲染的最后一個元素。
通過使用Element變量,我們使我們的代碼更簡潔易讀。
/ 性能 /
這里的問題與上面的 if-else 項中提到的問題相同。
AND運算符用于檢查其左右表達式均正確。
- left_expr && right_expr
如果表達式解析為true,則AND運算符將返回正確表達式的求值。
Example:
- (true && "nnamdi")
- // "nnamdi"
- (true && 1234)
- // 1234
另一方面,如果表達式解析為false,則AND運算符將返回false:
- (false && "nnamdi")
- // false
- (false && 1234)
- // false
如果是這種情況,我們可以使用此AND運算符在React中有條件地呈現(xiàn)JSX。
/ Example /
- function App(props) {
- return (
- {
- props.loggedIn &&
You're logged in as {props.data.username}
- }
- )
- }
我們在JSX中使用AND運算符。花括號使我們能夠在JSX中添加和評估JS表達式。
/ 性能 /
雖然它和前面兩種條件渲染的方式在本質(zhì)上沒有什么區(qū)別,但帶AND(&&)運算符的JSX表達式被認為是一個更好的選擇,因為它在有條件地返回和渲染元素的同時,強制返回相同的結(jié)構(gòu)。
我們可以將組件設(shè)置為返回 null 值而不是JSX表達式,以便對其進行評估,但不會渲染任何內(nèi)容。
當組件返回null時,它將阻止React安裝該組件。
- function App(props) {
- if(props.noRender)
- return null
- return (
App Component- )
- }
如果設(shè)置了noRender屬性,則此組件返回null。因此,如果我們不希望App組件渲染,則將設(shè)置noRender道具 。
請注意,無論如何,都會觸發(fā)組件返回null的生命周期方法。
/ 性能 /
如上所述,盡管返回 null 的組件將不會渲染任何內(nèi)容,但仍將對其進行評估。這意味著不必要的計算可能會在大型應(yīng)用程序中加起來相當重要。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流