2-9 條件轉譯的使用(conditional rendering)
上個單元中已經使用 React 完成了計數器的基本功能,這個單元中讓我們來看在 React 中條件轉譯的使用。
假設現在我們想要幫計數器設定最大值和最小值,其中計數器最大只能到 10,最小只能到 0 ,而且預設起始值是 5 的話,可以怎麼做呢?
其中一種做法是當數字 <
10 的時候,才顯示出向上的箭頭,否則不要顯示;當數字 >
0 的時候,就顯示向上的箭頭,否則把向下的箭頭隱藏起來。
一般來說要把元素隱藏起來有幾種常見的做法,一種是讓整個 DOM 中的該元素都不要轉譯出來,另外一種是添加 CSS 屬性把它隱藏起來(例如 display: none
),先讓我們來看第一種做法。
#
思考如何根據條件不要轉譯特定的 DOM 元素若想要根據條件不去轉譯某些 DOM 元素的話,我們需要在 JSX 中做一些處理,舉例來說,可能會想在 JSX 中使用 if
來做條件判斷像這樣:
- 當
count < 10
的時候,才顯示向上的箭頭 - 當
count > 0
的時候,才顯示向下的箭頭
這樣的想法是正確的,然而有一個問題是,先前我們曾提過在 JSX 中只能帶入「表達式」,但 if
這種語法是屬於陳述句,也就是呼叫後不會直接得到回傳值。如果我們想要在 JSX 中做到條件判斷,就需要來了解一下 JavaScript 中的邏輯運算子。
#
JavaScript 邏輯運算子的使用:&& 和 || 是什麼在 JavaScript 中,&&
或 ||
這種語法稱作「邏輯運算子(Expressions - Logical operator)」,因為在 JSX 中的 {}
內只能放入表達式(expressions),而不能寫入像是 if...else...
這種陳述句(statement),因此在 React 中很長會使用到邏輯運算子這種語法。
先來看一下大家比較常看到的 ||
。||
邏輯上是「或(or)」的意思,在 JavaScript 中常常被當做定義變數的預設值來使用,假設寫 a || b
的話,意思就是當 a
為 false(為假)時就用 b
,當 a
為 true(為真)時就直接用 a
。
同時在 JavaScript 中的真假值在判斷時會自動作轉型,因此像是 null
、NaN
、0
、空字串、undefined
都會被轉型並判斷為「false(假)」。
以下面的例子來說:
info
💡 Tips:||
簡單來說,就是當 ||
前面的值為 false(假)時,就取後面的那個當值。
至於 &&
則反過來。當寫 a && b
時,當 a
為 true(為真)時,就拿後面的 b
,否則拿 a
。以下面的例子來說:
info
💡Tips:&&
簡單來說,就是當 &&
前面的值為 true 時,就取後面的那個當值。
補充:除了邏輯運算子之外,在 React 中也很常用到三元判斷式(ternary operator),它是透過 ?
和 :
的使用來組成 if...else
的的表達式,這個部分會在後面單元中再進行說明。
#
透過邏輯運算子達到條件轉譯回到計數器中,現在透過 &&
這種寫法,就可以做出一開始想要的 if
功能,因為 if
的意思就是如果為 true 時再幫我執行裡面的內容。
在不使用 if
而改用 &&
的方式後,向上的箭頭只需要把程式碼改成這樣:
向下的箭頭改成:
#
DOM 元素會完全消失當我們使用這種做法時,當條件符合的時候,這個按鍵的元素會從 DOM 中移除,可以試著在瀏覽器開發者工具的 Elements 頁籤中觀察看看,會發現這個 DOM 元素完全不存在:
#
換你了:透過邏輯運算子來實作條件轉譯現在請你透過邏輯運算子的方式來實作條件轉譯的功能,讓這個計數器的預設值是 5,使用者只能將計數器的數字控制在 0 ~ 10 之間,接著從瀏覽器的 Elements 頁籤中觀察 DOM 元素的變化。實作後的完整程式碼可以查看 Github 說明頁點擊連結「條件轉譯的使用」,或直接參考下面的連結:https://codepen.io/PJCHENder/pen/NWxrXzm