Vue의 동적으로 바인딩된 클래스에서 빈 클래스를 피하는 방법은 무엇입니까? 다음 기사에서는 함정을 피하는 방법을 소개하겠습니다. 도움이 되기를 바랍니다.
빈 문자열을 전달하면 DOM 출력에 빈 클래스가 나타날 수 있습니다. 삼항 연산자에서는 "null"을 반환할 수 있는데, 이는 DOM에 빈 클래스가 없음을 보장합니다. [관련 권장 사항: "vue.js Tutorial"]
<!-- ❌ --> <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
isBold에 따라 삼항 연산자를 사용합니다. code>는 <code>true
또는 falsy
로 적절한 클래스를 조건부로 설정합니다. 다음 예에서 isBold
가 true
이면 클래스가 bold
로 설정됩니다. 가상 값
인 경우 빈 문자열 ''
을 반환합니다.
htmlrrreeerrreee
jsrrreee
최종 렌더링은 다음과 같습니다.rrreee
isBold
가true
인 경우 >는 다음과 같이 렌더링됩니다:
null
다음으로 클래스에 null을 할당하는지 살펴보겠습니다.
무슨 일이 일어나는지. html
isBold
가 true
인 경우 > 는 다음과 같이 렌더링됩니다: 🎜rrreeeundefine
도 정상적으로 작동할 수 있습니다. 🎜rrreeerrreeeisBold
가 이러한 값 중 하나이면 삼항 연산자의 잘못된 경우를 반환합니다. 🎜rrreee&&
설정 클래스 사용&&
는 논리 연산자일 뿐만 아니라 실제로 값을 생성합니다. 따라서 isBold
가 true이면 bold
가 반환됩니다. 그러나 isBold
가 허수이면 isBold
값이 반환됩니다. 🎜🎜마지막 점을 강조합니다. isBold
값을 반환합니다. 따라서 isBold
의 값에 따라 빈 클래스가 있다는 원래의 문제가 여전히 존재합니다. 몇 가지 예를 살펴보겠습니다. 🎜isBold
는 false
isBold
는 null
isBold
는 null이므로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!