您好,登錄后才能下訂單哦!
本篇文章為大家展示了vue中為什么不建議使用空字符串作為className,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
在我們用三元表達式給DOM元素設置class時,使用空字符串,會導致渲染出一個沒有值的空class, 為了避免這種情況出現,可以使用null來代替空字符串。
<!-- ? --> <div :class="isBold ? 'bold' : ''"> <!-- <div class> --> <!-- ? --> <div :class="isBold ? 'bold' : null"> <!-- <div> -->
繼續來分析上面2行代碼
我們使用三元操作符,來決定是否給元素綁定class, isBold為true時綁定,返回bold,否則,返回''
<div :class="isBold ? 'bold' : ''"></div>
data() { return { isBold: false } }
這時,渲染結果如下
<div class></div> <!-- ? 空的class -->
如果isBold為true,渲染結果如下
<div class="bold"></div>
看看使用null的渲染結果
<div :class="isBold ? 'bold' : null"></div>
data() { return { isBold: false } }
渲染結果如下
<div></div> <!-- ? 很好 無空class>
如果isBold為false,渲染結果如下
<div class="bold"></div>
undefined和null的效果一樣
<div :class="isBold ? 'bold' : undefined"></div>
<div></div> <!-- ? 很好 無空class>
關于False值
當isBold的值為以下值時,三元表達式返回的也是假值
false
undefined
null
NaN
0
"" or '' or `` (empty string)
使用對象的形式更加可讀
<div :class="{ bold: isBold }"></div>
但三元表達式最佳的用處是在綁定復雜的class時
<div :class="isActive ? 'underline bold' : null"></div>
來看看另外一種情況
<div :class="isBold && 'bold'"></div>
&& 不僅是一個邏輯操作符,它同樣可以返回值,正如上面的代碼,如果isBold為真,它會返回bold,但是isBold為假的時候呢?
<div :class="isBold && 'bold'"></div>
這個時候回返回空class
<div class></div>
<div :class="isBold && 'bold'"></div>
為null時不會有空class
<div></div>
案例3:isBold為undefined
<div :class="isBold && 'bold'"></div>
為undefined時也不會有空class
<div></div>
造成上面這種情況的出現不是&&的問題,它只是用來做判斷并返回值而已
所以,如果我們想要使用&&時避免返回空class,最好用null或者undefined
但我更推薦大家使用對象的或者數組綁定的語法去設置class
在W#C的標準中, 空class也是可以用的
<!-- 無錯誤 --> <div class>...</div> <!-- 無錯誤 --> <div>...</div>
HTML的語法用也沒要求不準使用空的屬性
但是,為了代碼的可讀性,建議大家不要使用空屬性,特別是在需要操作DOM屬性做判斷時
空的屬性很容易造成難以察覺的錯誤
e.target.classList
e.className
img.src
...
但是...
空的id屬性是不被允許的
<!-- 錯誤 --> <div id>...</div> <!-- 錯誤 --> <div id="">...</div> <!-- 正確 --> <div id="name">...</div>
? Error: An ID must not be the empty string.
上述內容就是vue中為什么不建議使用空字符串作為className,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。