自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何避免在Vue中使用null作為class的空值

開發(fā) 前端
使用 null 而不是傳遞一個空字符串,這可能會導(dǎo)致DOM輸出中的一個空類。在你的三元操作符中,你可以返回 null。

使用 null 而不是傳遞一個空字符串,這可能會導(dǎo)致DOM輸出中的一個空類。在你的三元操作符中,你可以返回 null。這將確保DOM中沒有空類:

  1. <!-- ❌ --> 
  2. <div :class="isBold ? 'bold' : ''"> 
  3. <!-- <div class> --> 
  4.    
  5. <!-- ✅ --> 
  6. <div :class="isBold ? 'bold' : null"> 
  7. <!-- <div> --> 

比較空字符串 '' 和 null

讓我們深入研究上面的示例,然后更全面地了解正在發(fā)生的事情。

(1) 方案1:使用空字符串 '' /

我們使用三元運(yùn)算符根據(jù) isBold 是true還是falsy來有條件地設(shè)置適當(dāng)?shù)念?。在此示例中,我們要說的是,如果 isBold 是 true 的,它將把該類設(shè)置為 bold。如果是 false 的,它將返回一個空字符串 “”。 :class 是 v-bind:class 的縮寫。

  1. <div :class="isBold ? 'bold' : ''"></div> 
  2.  
  3. data() { 
  4.   return { 
  5.     isBold: false 
  6.   } 

這將渲染:

  1. <div class></div> 
  2. <!--  糟糕, 空class --> 

如果 isBold 為 true ,它將渲染:

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

(2) 方案2:使用 null /

好吧,讓我們看看如果將 null 分配為類的值會發(fā)生什么。

  1. <div :class="isBold ? 'bold' : null"></div> 
  2.  
  3. data() { 
  4.   return { 
  5.     isBold: false 
  6.   } 

這將渲染:

  1. <div></div> 
  2. <!-- ✅ Nice, 沒有空class --> 

如果 isBold 為 true ,它將渲染:

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

(3) 方案3:使用undefined /

順便說一句, undefined 也可以工作

  1. <div :class="isBold ? 'bold' : undefined"></div> 
  2.  
  3. <div></div> 
  4. <!-- ✅ Nice, 沒有空class --> 

false值

提醒一下,這些是JavaScript中的false值。因此,如果 isBold 是這些值中的任何一個,它將返回三元運(yùn)算符的false條件。

  1. false 
  2. undefined 
  3. null 
  4. NaN 
  5. "" or '' or `` (empty string) 

使用對象語法重構(gòu)

在我的簡單示例中,使用對象語法可能更好一些,如下所示:

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

我猜使用三元運(yùn)算符的一個更好的例子是設(shè)置多個類。

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

題外話:當(dāng)我創(chuàng)作Demo時(shí),我總是盡量讓事情變得簡單。其中一種方法就是盡可能地減少視覺噪音。因此,我的例子有時(shí)會過于簡化,希望讀者能夠在不做太多處理的情況下立即掌握概念?!秳e讓我思考》這本書給了我很大的啟發(fā)。好了,言歸正傳,我們回到主菜上吧!

使用&&設(shè)置class

讓我們探索另一種情況,看看是否可行。

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

&& 不僅是產(chǎn)生布爾值的邏輯運(yùn)算符,它實(shí)際上可以產(chǎn)生一個值。因此,這就是說如果 isBold 為真,則返回 bold。但是,如果isBold 為假,則返回 isBold 的值。

強(qiáng)調(diào)最后一點(diǎn)——它將返回isBold的值。所以我們原來的空類問題仍然可以存在,取決于 isBold 的值是什么。我們來看看一些例子。

例子1: isBold 等于 false /

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

這仍將渲染空類

  1. <div class></div> 

例子2: isBold 等于 null /

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

 

由于 isBold 為 null,因此空類消失了 。

  1. <div></div> 

&& 并沒有錯——事實(shí)上它正在做它的工作,只是我們需要一個具體的返回值。在其他方面,我們不能渲染空類,我們必須傳遞 null 或 undefined。任何其他的假值都是不行的,因?yàn)檫@一點(diǎn)很容易被忽略,所以我更喜歡更明確的三元操作符或者簡單的對象語法 。

空類屬性不好嗎?

我試著用W3C Markup Validation Service檢查了一下,兩種語法確實(shí)都通過了。

  1. <!-- Pass --> 
  2. <div class>...</div> 
  3.  
  4. <!-- Pass --> 
  5. <div>...</div> 

深入探討HTML標(biāo)準(zhǔn):空屬性語法,似乎并不禁止空屬性。

但是...

但是有效性不適用于 id,因?yàn)榭誌D被認(rèn)為是無效的。

  1. <!-- Fail --> 
  2. <div id>...</div> 
  3.  
  4. <!-- Fail --> 
  5. <div id="">...</div> 
  6.  
  7. <!-- Pass --> 
  8. <div id="name">...</div> 

❌ 錯誤:ID不能為空字符串。

總結(jié)

既然空類被認(rèn)為是有效的,規(guī)范也不反對,這一切都取決于你的風(fēng)格選擇。這是你的代碼庫,你可以決定如何處理它。如果你想保持你的HTML輸出干凈,那么你可以將 null 傳遞給你的Vue三元操作符。如果你覺得無所謂,那就算了。這里沒有錯誤的答案,全看你喜歡什么了。

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2020-08-20 08:23:52

VueDOM運(yùn)算符

2011-09-07 09:51:27

Javascript

2017-07-14 10:10:08

Vue.jsMixin

2022-01-03 08:06:15

函數(shù)Go數(shù)據(jù)

2024-07-12 08:56:40

2020-02-10 10:23:03

VueJSX前端

2021-09-07 10:24:36

Vue應(yīng)用程序Web Workers

2021-04-17 18:24:04

Vue.js嵌套路由前端

2020-09-14 14:18:05

Vue和React

2011-04-22 11:07:24

groovyJava

2022-02-22 08:29:59

Vue前端防抖

2023-10-08 11:09:22

Optional空指針

2015-07-30 10:12:32

JavaNullAssert

2019-11-21 08:51:56

Java異常控制流

2024-06-27 12:21:13

2023-03-22 09:05:48

Linux舊相機(jī)網(wǎng)絡(luò)攝像頭

2009-06-25 16:49:24

Hibernate

2023-11-17 12:04:39

GORM并發(fā)

2013-12-13 17:21:14

Lua腳本語言

2023-04-12 15:25:09

Bytrace鴻蒙
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號