Vue 동적으로 바인딩된 클래스에서 빈 클래스를 피하는 방법은 무엇입니까? 다음 글에서는 Vue에서 클래스를 동적으로 바인딩할 때 빈 클래스를 피하는 방법을 소개하겠습니다. 도움이 되길 바랍니다!
【관련 권장 사항: vuejs 비디오 튜토리얼】
빈 문자열을 전달하면 DOM 출력의 클래스가 비어 있을 수 있습니다. 삼항 연산자에서는 "null"을 반환하여 DOM에 빈 클래스가 없음을 보장할 수 있습니다.
<!-- ❌ --> <div :class="isBold ? 'bold' : ''"> <!-- <div class> --> <!-- ✅ --> <div :class="isBold ? 'bold' : null"> <!-- <div> --
''
''
我们使用三元运算符根据isBold
是true
还是falsy
来有条件地设置适当的类。 在下面示例中,如果isBold
是 真值
,类就被设置为bold
。 如果是虚值
的,它将返回一个空字符串''
。
html
<div :class="isBold ? 'bold' : ''"></div>
js
data() { return { isBold: false } }
最终渲染的样子:
<div class></div> <!-- ? 啊! 空的class -->
如果isBold
为true
,会被渲染为:
<div class="bold"></div>
null
接着,来看看如果我们给类赋值为null
会发生什么。
html
<div :class="isBold ? 'bold' : null"></div>
js
data() { return { isBold: false } }
最终渲染的样子:
<div></div> <!-- ✅ Nice, 没有空的 class -->
如果isBold
为true
,会被渲染为:
<div class="bold"></div>
顺便说一句,undefined
也可以正常工作 ?
<div :class="isBold ? 'bold' : 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 ? 'underline bold' : null"></div>
&&
设置类我们看看另一个场景,看看它是否有效。
<div :class="isBold && 'bold'"></div>
&&
不仅是逻辑运算符,它实际上可以产生一个值。 因此,如果isBold
为真值,则返回bold
。 但是,如果isBold
是虚值,则返回isBold
的值。
强调最后一点-它将返回isBold
的值。 因此,取决于isBold
的值是什么,我们原来具有空类的问题仍然存在。 让我们看一些例子。
isBold
等于false
<div :class="isBold && 'bold'"></div>
这仍然会渲染空类 ?
<div class></div>
isBold
等于null
<div :class="isBold && 'bold'"></div>
由于isBold
为null
,因此空类消失了 ?。
<div></div>
&&
没错-实际上,它只是完成其工作。 只是我们需要一个特定的返回值。 在其他方面,我们不能渲染空类,我们必须传递null
或undefined
。 除了这两个的任何其他虚值都是不行的。 因为这很容易被遗漏,所以我更喜欢更明确的三元运算符,或者只是对象语法?。
我尝试使用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
3개를 사용합니다 메타 연산자는 isBold
가 true
인지 falsy
인지에 따라 조건부로 적절한 클래스를 설정합니다. 다음 예에서 isBold
가 true
이면 클래스가 bold
로 설정됩니다. 가상
인 경우 빈 문자열 ''
을 반환합니다.
htmlrrreeejsrrreee최종 렌더링은 다음과 같습니다.
rrreee🎜isBold
가 true
인 경우 >는 다음과 같이 렌더링됩니다: 🎜rrreee🎜옵션 2: null
사용🎜다음으로 클래스에 null
을 할당하면 어떤 일이 발생하는지 살펴보겠습니다. 🎜🎜html🎜rrreee🎜js🎜rrreee🎜최종 렌더링은 다음과 같습니다. 🎜rrreee🎜 isBold
가 true
인 경우 > 는 다음과 같이 렌더링됩니다: 🎜rrreee🎜옵션 3: 정의되지 않은 값 사용🎜그런데 정의되지 않은
도 정상적으로 작동할 수 있나요?🎜rrreeerrreee🎜가상 값🎜다음은 . 따라서 isBold
가 이러한 값 중 하나이면 삼항 연산자의 잘못된 경우를 반환합니다. 🎜rrreee🎜객체 구문을 사용하여 리팩터링🎜위의 예에서는 객체 구문을 사용하는 것이 더 좋습니다. 🎜rrreee🎜삼항 연산자를 사용하는 더 나은 시나리오는 여러 클래스를 설정하는 것입니다. 🎜rrreee🎜 &&
설정 클래스 사용🎜 작동하는지 확인하기 위해 다른 시나리오를 살펴보겠습니다. 🎜rrreee🎜&&
는 논리 연산자일 뿐만 아니라 실제로 값을 생성합니다. 따라서 isBold
가 true이면 bold
가 반환됩니다. 그러나 isBold
가 허수이면 isBold
값이 반환됩니다. 🎜🎜마지막 점을 강조합니다. isBold
값을 반환합니다. 따라서 isBold
의 값에 따라 빈 클래스가 있다는 원래의 문제가 여전히 존재합니다. 몇 가지 예를 살펴보겠습니다. 🎜🎜예제 A: isBold
는 false
rrreee와 같습니다.🎜이렇게 해도 빈 클래스가 렌더링됩니까?🎜rrreee🎜예 B: isBold code>는 <code>null
rrreee🎜와 같습니다. isBold
가 null
이므로 빈 클래스는 사라지나요?. 🎜rrreee🎜&&
맞습니다. 실제로는 제 역할을 할 뿐입니다. 단지 특정한 반환 값이 필요할 뿐입니다. 다른 측면에서는 빈 클래스를 렌더링할 수 없으며 null
또는 undefine
을 전달해야 합니다. 이 두 가지 이외의 다른 거짓 값은 작동하지 않습니다. 놓치기 쉽기 때문에 좀 더 명시적인 삼항 연산자를 선호합니까, 아니면 객체 구문만 선호합니까? 🎜🎜빈 클래스 속성이 잘못된 건가요? 🎜 W3C Markup Validation Service🎜를 사용해 확인했는데 두 구문 모두 실제로 통과했습니다. 🎜rrreee🎜HTML 표준 자세히 알아보기: HTML 표준: 빈 속성 구문🎜, 빈 속성을 허용하지 않는 것 같습니다. 🎜🎜하지만...🎜그러나 이 유효성은 id
에는 적용되지 않습니다. 빈 id
는 유효하지 않은 것으로 간주되기 때문입니다. 🎜rrreee❌ 오류: ID는 빈 문자열일 수 없습니다.🎜요약🎜 빈 클래스는 유효한 것으로 간주되고 사양에서는 이에 반대하지 않으므로 모두 사용자의 선택입니다. 그것은 당신의 코드베이스이고 당신은 그것으로 무엇을 할지 결정합니다. HTML 출력을 깔끔하게 유지하려면
null
을 Vue 삼항 연산자에 전달할 수 있습니다. 그것이 당신에게 중요하지 않다면 잊어 버리십시오. 정답은 없습니다. 취향에 따라 다르죠?🎜🎜 (학습 영상 공유: 🎜웹 프론트엔드 개발🎜, 🎜기본 프로그래밍 영상🎜)🎜위 내용은 Vue에서 클래스를 동적으로 바인딩할 때 빈 클래스를 피하는 방법에 대해 이야기해 보겠습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!