Vue가 클래스를 동적으로 바인딩할 때 빈 클래스를 피하는 방법!

青灯夜游
풀어 주다: 2021-12-09 10:16:43
앞으로
1889명이 탐색했습니다.

Vue의 동적으로 바인딩된 클래스에서 빈 클래스를 피하는 방법은 무엇입니까? 다음 기사에서는 함정을 피하는 방법을 소개하겠습니다. 도움이 되기를 바랍니다.

Vue가 클래스를 동적으로 바인딩할 때 빈 클래스를 피하는 방법!

빈 문자열을 전달하면 DOM 출력에 빈 클래스가 나타날 수 있습니다. 삼항 연산자에서는 "null"을 반환할 수 있는데, 이는 DOM에 빈 클래스가 없음을 보장합니다. [관련 권장 사항: "vue.js Tutorial"]

<!-- ❌ -->
<div :class="isBold ? &#39;bold&#39; : &#39;&#39;">
<!-- <div class> -->

<!-- ✅ -->
<div :class="isBold ? &#39;bold&#39; : null">
<!-- <div> -->
로그인 후 복사

옵션 1: 빈 문자열 ''

사용&#39;&#39;

我们使用三元运算符根据isBoldtrue还是falsy来有条件地设置适当的类。 在下面示例中,如果isBold真值,类就被设置为bold。 如果是虚值的,它将返回一个空字符串&#39;&#39;

html

<div :class="isBold ? &#39;bold&#39; : &#39;&#39;"></div>
로그인 후 복사

js

data() {
  return {
    isBold: false
  }
}
로그인 후 복사
로그인 후 복사

最终渲染的样子:

<div class></div>
<!-- 啊! 空的class -->
로그인 후 복사

如果isBoldtrue,会被渲染为:

<div class="bold"></div>
로그인 후 복사
로그인 후 복사

方案 2:使用null

接着,来看看如果我们给类赋值为null会发生什么。

html

<div :class="isBold ? &#39;bold&#39; : null"></div>
로그인 후 복사

js

data() {
  return {
    isBold: false
  }
}
로그인 후 복사
로그인 후 복사

最终渲染的样子:

<div></div>
<!-- Nice, 没有空的 class -->
로그인 후 복사

如果isBoldtrue,会被渲染为:

<div class="bold"></div>
로그인 후 복사
로그인 후 복사

方案 3:使用 undefined

顺便说一句,undefined也可以正常工作

<div :class="isBold ? &#39;bold&#39; : undefined"></div>
로그인 후 복사
<div></div>
<!-- Nice, no empty class -->
로그인 후 복사

虚值

下面这些是 JS 中的虚值。 因此,如果isBold是这些值中的任何一个,它将返回三元运算符的假的情况。

false
undefined
null
NaN
0
"" or &#39;&#39; or `` (empty string)
로그인 후 복사

使用对象语法重构

对于上面的事例,使用对象语法会更好一些:

<div :class="{ bold: isBold }"></div>
로그인 후 복사

使用三元运算符的一个更好的场景是设置多个类。

<div :class="isActive ? &#39;underline bold&#39; : null"></div>
로그인 후 복사

使用 && 设置类

我们看看另一个场景,看看它是否有效。

<div :class="isBold && &#39;bold&#39;"></div>
로그인 후 복사
로그인 후 복사
로그인 후 복사

&&不仅是逻辑运算符,它实际上可以产生一个值。 因此,如果isBold为真值,则返回bold。 但是,如果isBold是虚值,则返回isBold的值。

强调最后一点-它将返回isBold的值。 因此,取决于isBold的值是什么,我们原来具有空类的问题仍然存在。 让我们看一些例子。

示例 A:isBold等于false

<div :class="isBold && &#39;bold&#39;"></div>
로그인 후 복사
로그인 후 복사
로그인 후 복사

这仍然会渲染空类

<div class></div>
로그인 후 복사

示例B:isBold等于null

<div :class="isBold && &#39;bold&#39;"></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 isBold에 따라 삼항 연산자를 사용합니다. code>는 <code>true 또는 falsy로 적절한 클래스를 조건부로 설정합니다. 다음 예에서 isBoldtrue이면 클래스가 bold로 설정됩니다. 가상 값인 경우 빈 문자열 ''을 반환합니다.

html

rrreee

js

rrreee

최종 렌더링은 다음과 같습니다.

rrreee

isBoldtrue인 경우 >는 다음과 같이 렌더링됩니다:
rrreee

옵션 2: null

사용

다음으로 클래스에 null을 할당하는지 살펴보겠습니다. 무슨 일이 일어나는지. html

rrreee🎜js🎜rrreee🎜최종 렌더링은 다음과 같습니다. 🎜rrreee🎜 isBoldtrue인 경우 > 는 다음과 같이 렌더링됩니다: 🎜rrreee

옵션 3: 정의되지 않은 사용

🎜 그런데 undefine도 정상적으로 작동할 수 있습니다. 🎜rrreeerrreee

가상값

🎜다음은 JS에서의 가상값입니다. 따라서 isBold가 이러한 값 중 하나이면 삼항 연산자의 잘못된 경우를 반환합니다. 🎜rrreee

객체 구문을 사용하여 리팩토링

🎜위의 예에서는 객체 구문을 사용하는 것이 더 좋습니다. 🎜rrreee🎜삼항 연산자를 사용하는 더 나은 시나리오는 여러 클래스 설정입니다. . 🎜rrreee

&& 설정 클래스 사용

🎜 작동하는지 확인하기 위해 다른 시나리오를 살펴보겠습니다. 🎜rrreee🎜&&는 논리 연산자일 뿐만 아니라 실제로 값을 생성합니다. 따라서 isBold가 true이면 bold가 반환됩니다. 그러나 isBold가 허수이면 isBold 값이 반환됩니다. 🎜🎜마지막 점을 강조합니다. isBold 값을 반환합니다. 따라서 isBold의 값에 따라 빈 클래스가 있다는 원래의 문제가 여전히 존재합니다. 몇 가지 예를 살펴보겠습니다. 🎜

예 A: isBoldfalse

rrreee와 같습니다🎜이렇게 하면 여전히 빈 클래스가 렌더링됩니다🎜rrreee

예 B: isBoldnull

rrreee🎜와 같습니다. isBoldnull이므로 code>, 따라서 빈 클래스는 사라집니다. 🎜rrreee🎜&&맞습니다. 실제로는 제 역할을 할 뿐입니다. 단지 특정한 반환 값이 필요할 뿐입니다. 다른 측면에서는 빈 클래스를 렌더링할 수 없으며 null 또는 undefine을 전달해야 합니다. 이 두 가지 이외의 다른 거짓 값은 작동하지 않습니다. 이것은 놓치기 쉽기 때문에 좀 더 명확한 삼항 연산자나 객체 구문을 선호합니다. 🎜

빈 클래스 속성이 잘못된 건가요?

🎜 W3C Markup Validation Service🎜를 사용하여 확인하려고 했는데 두 구문 모두 실제로 정상입니다. 통과하다. 🎜rrreee🎜HTML 표준 자세히 알아보기: HTML 표준: 빈 속성 구문🎜, 빈 속성을 허용하지 않는 것 같습니다. 🎜

하지만...

🎜그러나 이 유효성은 id에는 적용되지 않습니다. 빈 id는 유효하지 않은 것으로 간주되기 때문입니다. 🎜rrreee🎜❌ 오류: ID는 빈 문자열일 수 없습니다. 🎜

요약

🎜 빈 클래스는 유효한 것으로 간주되고 사양에서는 이에 반대하지 않으므로 모두 귀하의 선택입니다. 그것은 당신의 코드베이스이고 당신은 그것으로 무엇을 할지 결정합니다. HTML 출력을 깔끔하게 유지하려면 null을 Vue 삼항 연산자에 전달할 수 있습니다. 그것이 당신에게 중요하지 않다면 잊어 버리십시오. 여기에는 정답이 없습니다. 모두 선호도에 따라 다릅니다🎜🎜🎜영어 원본 주소: https://www.samanthaming.com/tidbits/96-vue-use-null-for-class/🎜🎜저자: Samantha Ming 🎜🎜번역자: 프론트엔드 Xiaozhi🎜🎜🎜더 많은 프로그래밍 관련 지식을 보려면 🎜프로그래밍 입문🎜을 방문하세요! ! 🎜

위 내용은 Vue가 클래스를 동적으로 바인딩할 때 빈 클래스를 피하는 방법!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
vue
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿