为什么vue中不建议使用空字符串作为className

 更新时间:2021年09月23日 16:29:00   作者:油炸皮卡丘  
本文主要介绍了为什么vue中不建议使用空字符串作为className,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

在我们用三元表达式给DOM元素设置class时,使用空字符串,会导致渲染出一个没有值的空class, 为了避免这种情况出现,可以使用null来代替空字符串。

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

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

比较空字符串''和null

继续来分析上面2行代码

情况1:使用空字符串''

我们使用三元操作符,来决定是否给元素绑定class, isBold为true时绑定,返回bold,否则,返回''

<div :class="isBold ? 'bold' : ''"></div>
data() {
  return {
    isBold: false
  }
}

这时,渲染结果如下

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

如果isBold为true,渲染结果如下

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

情况2:使用null

看看使用null的渲染结果

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

data() {
  return {
    isBold: false
  }
}

渲染结果如下

<div></div>
<!-- ✅ 很好 无空class>

如果isBold为false,渲染结果如下

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

情况3:使用undefined

undefined和null的效果一样

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

<div></div>
<!-- ✅ 很好 无空class>

关于False值

当isBold的值为以下值时,三元表达式返回的也是假值

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

使用对象的形式绑定class

使用对象的形式更加可读

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

但三元表达式最佳的用处是在绑定复杂的class时

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

使用 &&绑定class

来看看另外一种情况

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

&& 不仅是一个逻辑操作符,它同样可以返回值,正如上面的代码,如果isBold为真,它会返回bold,但是isBold为假的时候呢?

案例1:isBold为false

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

这个时候回返回空class

<div class></div>

案例2:isBold为null

<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

空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的文章就介绍到这了,更多相关vue 空字符串作为className内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一篇文章教你实现VUE多个DIV,button绑定回车事件

    一篇文章教你实现VUE多个DIV,button绑定回车事件

    这篇文章主要介绍了VUE多个DIV绑定回车事件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-10-10
  • vue.js中toast用法及使用toast弹框的实例代码

    vue.js中toast用法及使用toast弹框的实例代码

    这篇文章主要介绍了vue.js中toast用法及使用toast弹框的实例代码,本文给大家介绍的非常详细,具有一定的参考借鉴加载,需要的朋友可以参考下
    2018-08-08
  • Vant实现上传多个图片或视频,更改视频预览图

    Vant实现上传多个图片或视频,更改视频预览图

    这篇文章主要介绍了Vant实现上传多个图片或视频,更改视频预览图,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue中Mustache引擎插值语法使用详解

    Vue中Mustache引擎插值语法使用详解

    在Vue中通过Mustache模板引擎将data中的文本数据插入到HTML中,下面这篇文章主要给大家介绍了关于Vue中Mustache模板引擎插值语法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 调用createApp 时Vue工作过程原理

    调用createApp 时Vue工作过程原理

    这篇文章主要为大家介绍了调用createApp 时Vue工作过程原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • vue中el-table实现自动吸顶效果(支持fixed)

    vue中el-table实现自动吸顶效果(支持fixed)

    本文主要介绍了vue中el-table实现自动吸顶效果,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • vue项目关闭eslint校验

    vue项目关闭eslint校验

    eslint是一个JavaScript的校验插件,通常用来校验语法或代码的书写风格。这篇文章主要介绍了vue项目关闭eslint校验,需要的朋友可以参考下
    2018-03-03
  • Vue异步更新DOM及$nextTick执行机制解读

    Vue异步更新DOM及$nextTick执行机制解读

    这篇文章主要介绍了Vue异步更新DOM及$nextTick执行机制解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • vue.js国际化 vue-i18n插件的使用详解

    vue.js国际化 vue-i18n插件的使用详解

    本篇文章主要介绍了vue.js国际化 vue-i18n插件的使用详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • vue3+vite2中使用svg的方法详解(亲测可用)

    vue3+vite2中使用svg的方法详解(亲测可用)

    vue2的时候使用的是字体图标,缺点就是比较单一,到了vue3,相信浏览器的性能起来,所以这里记录一下,下面这篇文章主要给大家介绍了关于vue3+vite2中使用svg的相关资料,需要的朋友可以参考下
    2022-08-08

最新评论