溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

React中怎么實(shí)現(xiàn)條件渲染

發(fā)布時(shí)間:2021-08-07 16:54:30 來(lái)源:億速云 閱讀:136 作者:Leah 欄目:web開(kāi)發(fā)

今天就跟大家聊聊有關(guān)React中怎么實(shí)現(xiàn)條件渲染,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

1. if-else

我們可以將 if-else 條件邏輯應(yīng)用于React中的JSX。請(qǐng)記住,JSX在執(zhí)行之前已編譯為JS,因此我們實(shí)際上是在用JS代碼編寫。

/ Example /

var globalVar = true function App() {   if(globalVar) {     return <div>If Rendering</div>   } else {     return <div>Else Rendering</div>   } }

/ 性能 /

if-else 語(yǔ)句可能會(huì)導(dǎo)致React中的渲染浪費(fèi)。這在中小型應(yīng)用中可能感覺(jué)不到,但在有成百上千組件的大型應(yīng)用中,性能拖累會(huì)相當(dāng)明顯。

讓我們研究以下示例:

render() {   if(props.showA) {     return (       <A />       <B />       <C />     )       }   return (     <B />     <C />   ) }

根據(jù)條件加載組件A,B,C。

如果 showA prop為真,則渲染A,B,C。如果 showA prop 為假,則跳過(guò)A并僅渲染B和C。

這里的問(wèn)題來(lái)自React的差異算法。這個(gè)算法是React用來(lái)知道何時(shí)避免浪費(fèi)渲染的算法。

在初始 showA 為 true 時(shí),組件將按照其結(jié)構(gòu)A-> B-> C進(jìn)行渲染。只要 showA 為 true  且其props不變,React就不會(huì)重新渲染。

但是,當(dāng) showA 變?yōu)?false  時(shí),呈現(xiàn)結(jié)構(gòu)將發(fā)生變化,結(jié)構(gòu)將為B->C?,F(xiàn)在,React會(huì)看到一個(gè)與之前的結(jié)構(gòu)不同的結(jié)構(gòu),并且會(huì)重新渲染(un-mount 和  re-mount)B和C組件,即使它們的props/state保持不變,不需要重新渲染。這是一種浪費(fèi)的重新渲染。

2.三元運(yùn)算符

三元運(yùn)算符是“if-else”條件的縮寫。第一部分說(shuō)明條件,第二部分則為返回值(如果為true),最后一部分為返回值(如果為false)。

condition ? true_cond : false_cond

/ Example /

let cond = true function App() {   return (     {cond ?       <div>If Rendering</div>      :      <div>Else Rendering</div>     }   ) }

3.Element變量

Element變量包含JSX元素,因此可以在React組件中的任何地方使用。Element變量使你的代碼更易于閱讀和理解,因?yàn)樗私M件中的多個(gè)return語(yǔ)句。

實(shí)施此操作的標(biāo)準(zhǔn)方法:

function App(props) {   if(props.loggedIn) {     return <div>Logged In</div>   } else {     return <div>Not Logged In</div>   } }

在上面的組件中,我們有多個(gè)return語(yǔ)句。我們?cè)贘SX中使用 if-else 來(lái)有條件地呈現(xiàn)部分UI。

我們可以使用Element變量來(lái)存儲(chǔ)要在條件語(yǔ)句的每個(gè)結(jié)果上返回的元素。

/ Example /

function App(props) {   let element   if(props.loggedIn) {     element = <div>Logged In</div>   } else {     element = <div>Not Logged In</div>   }   return element }

根據(jù) if-else 語(yǔ)句的求值,我們使用 element變量 保存要渲染的最后一個(gè)元素。

通過(guò)使用Element變量,我們使我們的代碼更簡(jiǎn)潔易讀。

/ 性能 /

這里的問(wèn)題與上面的 if-else 項(xiàng)中提到的問(wèn)題相同。

4. AND運(yùn)算符(&&)

AND運(yùn)算符用于檢查其左右表達(dá)式均正確。

left_expr && right_expr

如果表達(dá)式解析為true,則AND運(yùn)算符將返回正確表達(dá)式的求值。

Example:

(true && "nnamdi") // "nnamdi" (true && 1234) // 1234

另一方面,如果表達(dá)式解析為false,則AND運(yùn)算符將返回false:

(false && "nnamdi") // false (false && 1234) // false

如果是這種情況,我們可以使用此AND運(yùn)算符在React中有條件地呈現(xiàn)JSX。

/ Example /

function App(props) {   return (     <div>     {       props.loggedIn &&        <h4>You're logged in as {props.data.username}</h4>     }     </div>   ) }

我們?cè)贘SX中使用AND運(yùn)算符。花括號(hào)使我們能夠在JSX中添加和評(píng)估JS表達(dá)式。

/ 性能 /

雖然它和前面兩種條件渲染的方式在本質(zhì)上沒(méi)有什么區(qū)別,但帶AND(&&)運(yùn)算符的JSX表達(dá)式被認(rèn)為是一個(gè)更好的選擇,因?yàn)樗谟袟l件地返回和渲染元素的同時(shí),強(qiáng)制返回相同的結(jié)構(gòu)。

5.返回null

我們可以將組件設(shè)置為返回 null 值而不是JSX表達(dá)式,以便對(duì)其進(jìn)行評(píng)估,但不會(huì)渲染任何內(nèi)容。

當(dāng)組件返回null時(shí),它將阻止React安裝該組件。

function App(props) {   if(props.noRender)     return null    return (     <div>App Component</div>   ) }

如果設(shè)置了noRender屬性,則此組件返回null。因此,如果我們不希望App組件渲染,則將設(shè)置noRender道具 。

看完上述內(nèi)容,你們對(duì)React中怎么實(shí)現(xiàn)條件渲染有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI