> 웹 프론트엔드 > View.js > Vue에서 클래스를 동적으로 바인딩할 때 빈 클래스를 피하는 방법에 대해 이야기해 보겠습니다!

Vue에서 클래스를 동적으로 바인딩할 때 빈 클래스를 피하는 방법에 대해 이야기해 보겠습니다!

青灯夜游
풀어 주다: 2022-09-21 20:27:19
앞으로
1590명이 탐색했습니다.

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

Vue에서 클래스를 동적으로 바인딩할 때 빈 클래스를 피하는 방법에 대해 이야기해 보겠습니다!

【관련 권장 사항: vuejs 비디오 튜토리얼

빈 문자열을 전달하면 DOM 출력의 클래스가 비어 있을 수 있습니다. 삼항 연산자에서는 "null"을 반환하여 DOM에 빈 클래스가 없음을 보장할 수 있습니다.

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

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

옵션 1: 빈 문자열 ''

사용''

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

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 '' 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输出的整洁,则可以将null3개를 사용합니다 메타 연산자는 isBoldtrue인지 falsy인지에 따라 조건부로 적절한 클래스를 설정합니다. 다음 예에서 isBoldtrue이면 클래스가 bold로 설정됩니다. 가상인 경우 빈 문자열 ''을 반환합니다.

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

rrreee🎜 isBoldtrue인 경우 >는 다음과 같이 렌더링됩니다: 🎜rrreee🎜옵션 2: null 사용🎜다음으로 클래스에 null을 할당하면 어떤 일이 발생하는지 살펴보겠습니다. 🎜🎜html🎜rrreee🎜js🎜rrreee🎜최종 렌더링은 다음과 같습니다. 🎜rrreee🎜 isBoldtrue인 경우 > 는 다음과 같이 렌더링됩니다: 🎜rrreee🎜옵션 3: 정의되지 않은 값 사용🎜그런데 정의되지 않은도 정상적으로 작동할 수 있나요?🎜rrreeerrreee🎜가상 값🎜다음은 . 따라서 isBold가 이러한 값 중 하나이면 삼항 연산자의 잘못된 경우를 반환합니다. 🎜rrreee🎜객체 구문을 사용하여 리팩터링🎜위의 예에서는 객체 구문을 사용하는 것이 더 좋습니다. 🎜rrreee🎜삼항 연산자를 사용하는 더 나은 시나리오는 여러 클래스를 설정하는 것입니다. 🎜rrreee🎜 && 설정 클래스 사용🎜 작동하는지 확인하기 위해 다른 시나리오를 살펴보겠습니다. 🎜rrreee🎜&&는 논리 연산자일 뿐만 아니라 실제로 값을 생성합니다. 따라서 isBold가 true이면 bold가 반환됩니다. 그러나 isBold가 허수이면 isBold 값이 반환됩니다. 🎜🎜마지막 점을 강조합니다. isBold 값을 반환합니다. 따라서 isBold의 값에 따라 빈 클래스가 있다는 원래의 문제가 여전히 존재합니다. 몇 가지 예를 살펴보겠습니다. 🎜🎜예제 A: isBoldfalserrreee와 같습니다.🎜이렇게 해도 빈 클래스가 렌더링됩니까?🎜rrreee🎜예 B: isBold code>는 <code>nullrrreee🎜와 같습니다. isBoldnull이므로 빈 클래스는 사라지나요?. 🎜rrreee🎜&&맞습니다. 실제로는 제 역할을 할 뿐입니다. 단지 특정한 반환 값이 필요할 뿐입니다. 다른 측면에서는 빈 클래스를 렌더링할 수 없으며 null 또는 undefine을 전달해야 합니다. 이 두 가지 이외의 다른 거짓 값은 작동하지 않습니다. 놓치기 쉽기 때문에 좀 더 명시적인 삼항 연산자를 선호합니까, 아니면 객체 구문만 선호합니까? 🎜🎜빈 클래스 속성이 잘못된 건가요? 🎜 W3C Markup Validation Service🎜를 사용해 확인했는데 두 구문 모두 실제로 통과했습니다. 🎜rrreee🎜HTML 표준 자세히 알아보기: HTML 표준: 빈 속성 구문🎜, 빈 속성을 허용하지 않는 것 같습니다. 🎜🎜하지만...🎜그러나 이 유효성은 id에는 적용되지 않습니다. 빈 id는 유효하지 않은 것으로 간주되기 때문입니다. 🎜rrreee
❌ 오류: ID는 빈 문자열일 수 없습니다.
🎜요약🎜 빈 클래스는 유효한 것으로 간주되고 사양에서는 이에 반대하지 않으므로 모두 사용자의 선택입니다. 그것은 당신의 코드베이스이고 당신은 그것으로 무엇을 할지 결정합니다. HTML 출력을 깔끔하게 유지하려면 null을 Vue 삼항 연산자에 전달할 수 있습니다. 그것이 당신에게 중요하지 않다면 잊어 버리십시오. 정답은 없습니다. 취향에 따라 다르죠?🎜🎜 (학습 영상 공유: 🎜웹 프론트엔드 개발🎜, 🎜기본 프로그래밍 영상🎜)🎜

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

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