在 Vue 中如何避免在動態綁定 類 出現空 類 的狀況?

做者:Samantha Ming
譯者:前端小智
來源:medium
點贊再看,微信搜索 【大遷世界】 關注這個沒有大廠背景,但有着一股向上積極心態人。本文 GitHub https://github.com/qq44924588... 上已經收錄,文章的已分類,也整理了不少個人文檔,和教程資料。

傳遞空字符串,這可能會致使 DOM 輸出中的類爲空。 在三元運算符中,咱們能夠返回"null",這能夠確保 DOM 中沒有空類🌟html

<!-- ❌ -->
<div :class="isBold ? 'bold' : ''">
<!-- <div class> -->

<!-- ✅ -->
<div :class="isBold ? 'bold' : null">
<!-- <div> -->

方案 1:使用空字符串 ''

咱們使用三元運算符根據isBoldtrue仍是falsy來有條件地設置適當的類。 在下面示例中,若是isBold真值,類就被設置爲bold。 若是是虛值的,它將返回一個空字符串''前端

htmlvue

<div :class="isBold ? 'bold' : ''"></div>

jsgit

data() {
  return {
    isBold: false
  }
}

最終渲染的樣子:github

<div class></div>
<!-- 😱 啊! 空的class -->

若是isBoldtrue,會被渲染爲:微信

<div class="bold"></div>

方案 2:使用null

接着,來看看若是咱們給類賦值爲null會發生什麼。工具

htmlspa

<div :class="isBold ? 'bold' : null"></div>

jsdebug

data() {
  return {
    isBold: false
  }
}

最終渲染的樣子:調試

<div></div>
<!-- ✅ Nice, 沒有空的 class -->

若是isBoldtrue,會被渲染爲:

<div class="bold"></div>

方案 3:使用 undefined

順便說一句,undefined也能夠正常工做 👍

<div :class="isBold ? 'bold' : undefined"></div>
<div></div>
<!-- ✅ Nice, no empty class -->

虛值

下面這些是 JS 中的虛值。 所以,若是isBold是這些值中的任何一個,它將返回三元運算符的假的狀況。

false
undefined
null
NaN
0
"" or '' or `` (empty string)

使用對象語法重構

對於上面的事例,使用對象語法會更好一些:

<div :class="{ bold: isBold }"></div>

使用三元運算符的一個更好的場景是設置多個類。

<div :class="isActive ? 'underline bold' : null"></div>

使用 && 設置類

咱們看看另外一個場景,看看它是否有效。

<div :class="isBold && 'bold'"></div>

&&不只是邏輯運算符,它實際上能夠產生一個值。 所以,若是isBold爲真值,則返回bold。 可是,若是isBold是虛值,則返回isBold的值。

強調最後一點-它將返回isBold的值。 所以,取決於isBold的值是什麼,咱們原來具備空類的問題仍然存在。 讓咱們看一些例子。

示例 A:isBold等於false

<div :class="isBold && 'bold'"></div>

這仍然會渲染空類 😱

<div class></div>

示例B:isBold等於null

<div :class="isBold && 'bold'"></div>

因爲isBoldnull,所以空類消失了 👍。

<div></div>

&&沒錯-實際上,它只是完成其工做。 只是咱們須要一個特定的返回值。 在其餘方面,咱們不能渲染空類,咱們必須傳遞nullundefined。 除了這兩個的任何其餘虛值都是不行的。 由於這很容易被遺漏,因此我更喜歡更明確的三元運算符,或者只是對象語法👍。

空類屬性是否錯誤?

我嘗試使用W3C Markup Validation Service進行檢查,兩種語法確實均可以經過。

<!-- Pass -->
<div class>...</div>

<!-- Pass -->
<div>...</div>

深刻到HTML標準: HTML Standard: Empty attribute syntax,它彷佛不容許空屬性。

可是...

可是這種有效性不適用於id。由於空id被認爲是無效的。

<!-- Fail -->
<div id>...</div>

<!-- Fail -->
<div id="">...</div>

<!-- Pass -->
<div id="name">...</div>
❌ 錯誤:ID不能爲空字符串。

總結

因爲空類被認爲是有效的,而且規範不反對它,所以全部這些都由你本身選擇。 它是你的代碼庫,你能夠決定如何處理它。 若是你想保持HTML輸出的整潔,則能夠將null傳遞給 Vue 三元運算符。 若是這對你來講可有可無,那就算了。 這裏沒有正確的答案,這徹底取決於你的偏好👍

人才們的 【三連】 就是小智不斷分享的最大動力,若是本篇博客有任何錯誤和建議,歡迎人才們留言,最後,謝謝你們的觀看。


編輯中可能存在的bug無法實時知道,過後爲了解決這些bug,花了大量的時間進行log 調試,這邊順便給你們推薦一個好用的BUG監控工具 Fundebug

原文:https://www.samanthaming.com/...

交流

文章每週持續更新,能夠微信搜索 【大遷世界 】 第一時間閱讀,回覆 【福利】 有多份前端視頻等着你,本文 GitHub https://github.com/qq449245884/xiaozhi 已經收錄,歡迎Star。

相關文章
相關標籤/搜索