Heim  >  Artikel  >  Web-Frontend  >  So vermeiden Sie leere Klassen, wenn Vue Klassen dynamisch bindet!

So vermeiden Sie leere Klassen, wenn Vue Klassen dynamisch bindet!

青灯夜游
青灯夜游nach vorne
2021-12-09 10:14:521876Durchsuche

Wie vermeide ich leere Klassen in dynamisch gebundenen Klassen in Vue? Der folgende Artikel zeigt Ihnen, wie Sie Fallstricke vermeiden können. Ich hoffe, dass er Ihnen weiterhilft.

So vermeiden Sie leere Klassen, wenn Vue Klassen dynamisch bindet!

Die Übergabe einer leeren Zeichenfolge kann zu leeren Klassen in der DOM-Ausgabe führen. Im ternären Operator können wir „null“ zurückgeben, was sicherstellt, dass es im DOM keine leeren Klassen gibt. [Verwandte Empfehlungen: „vue.js Tutorial“]

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

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

Option 1: Verwenden Sie die leere Zeichenfolge ''

''

我们使用三元运算符根据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 &#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输出的整洁,则可以将nullWir verwenden den ternären Operator gemäß isBold code> ist <code>true oder falsy, um die entsprechende Klasse bedingt festzulegen. Wenn im folgenden Beispiel isBold den Wert true hat, wird die Klasse auf bold gesetzt. Wenn es virtuell ist, wird eine leere Zeichenfolge '' zurückgegeben.

html

rrreee

js

rrreee

Das endgültige Rendering sieht so aus:

rrreee

Wenn isBold trueist > wird wie folgt gerendert:
rrreee

Option 2: Verwenden Sie null

Als nächstes wollen wir sehen, ob wir der Klasse null zuweisen Was passiert. html

rrreee🎜js🎜rrreee🎜Das endgültige Rendering sieht so aus: 🎜rrreee🎜Wenn isBold trueist > wird wie folgt gerendert: 🎜rrreee

Option 3: Undefiniert verwenden

🎜Übrigens kann undefiniert auch normal funktionieren 🎜rrreeerrreee

Virtueller Wert

🎜Das Folgende sind virtuelle Werte in JS. Wenn also isBold einer dieser Werte ist, wird der falsche Fall des ternären Operators zurückgegeben. 🎜rrreee

Refactoring mit Objektsyntax

🎜Für das obige Beispiel wäre es besser, die Objektsyntax zu verwenden: 🎜rrreee🎜Ein besseres Szenario mit dem ternären Operator ist Einrichten mehrerer Klassen . 🎜rrreee

Verwenden Sie die Einstellungsklasse &&

🎜Schauen wir uns ein anderes Szenario an, um zu sehen, ob es funktioniert. 🎜rrreee🎜&& ist nicht nur ein logischer Operator, er erzeugt tatsächlich einen Wert. Wenn also isBold wahr ist, wird bold zurückgegeben. Wenn isBold jedoch imaginär ist, wird der Wert von isBold zurückgegeben. 🎜🎜Betonung des letzten Punkts: Es wird der Wert von isBold zurückgegeben. Abhängig vom Wert von isBold besteht also immer noch unser ursprüngliches Problem einer leeren Klasse. Schauen wir uns einige Beispiele an. 🎜

Beispiel A: isBold entspricht false

rrreee🎜Dadurch wird weiterhin die leere Klasse gerendert🎜rrreee

Beispiel B: isBold ist gleich null

rrreee🎜Da isBold null ist code>, also verschwindet die leere Klasse. 🎜rrreee🎜&&Das stimmt – eigentlich macht es einfach seinen Job. Wir benötigen lediglich einen bestimmten Rückgabewert. Ansonsten können wir keine leeren Klassen rendern, wir müssen null oder undefiniert übergeben. Alle anderen falschen Werte als diese beiden funktionieren nicht. Da dies leicht zu übersehen ist, würde ich den expliziteren ternären Operator oder nur die Objektsyntax bevorzugen. 🎜

Ist das leere Klassenattribut falsch?

🎜Ich habe versucht, den W3C Markup Validation Service🎜 zu verwenden, um zu überprüfen, ob beide Syntaxen tatsächlich in Ordnung sind passieren. 🎜rrreee🎜Tief in den HTML-Standard: HTML-Standard: Syntax für leere Attribute🎜, sie scheint keine leeren Attribute zuzulassen. 🎜

Aber...

🎜Aber diese Gültigkeit gilt nicht für id. Weil eine leere id als ungültig gilt. 🎜rrreee🎜❌ Fehler: ID darf kein leerer String sein. 🎜

Zusammenfassung

🎜Da leere Klassen als gültig gelten und die Spezifikation keine Einwände dagegen erhebt, liegt die Entscheidung ganz bei Ihnen. Es ist Ihre Codebasis und Sie entscheiden, was Sie damit machen möchten. Wenn Sie Ihre HTML-Ausgabe sauber halten möchten, können Sie null an den ternären Vue-Operator übergeben. Wenn es dir egal ist, vergiss es. Hier gibt es keine richtige Antwort, es hängt alles von Ihren Vorlieben ab🎜🎜🎜Englische Originaladresse: https://www.samanthaming.com/tidbits/96-vue-use-null-for-class/🎜🎜Autorin: Samantha Ming 🎜🎜Übersetzer: Front-End Xiaozhi🎜🎜🎜Weitere Kenntnisse zum Thema Programmierung finden Sie unter: 🎜Einführung in die Programmierung🎜! ! 🎜

Das obige ist der detaillierte Inhalt vonSo vermeiden Sie leere Klassen, wenn Vue Klassen dynamisch bindet!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen