Das Problem der Verwendung von Slots durch Vue+tsx wird nicht behoben

Das Problem der Verwendung von Slots durch Vue+tsx wird nicht behoben

Vorwort

Ich plane vor Kurzem, eine UI Komponente zu schreiben, und möchte vue 2.x und 3.x besser verstehen.

Bereiten Sie sich beim Erstellen der Architektur darauf vor, tsx zum Schreiben aller Komponenten zu verwenden

Aber ich habe ein Problem mit slot in tsx

Finden Sie das Problem

Zuerst habe ich eine grundlegende card geschrieben:

card.tsx:

Komponente aus „Vue-Class-Komponente“ importieren
Importiere VanUIComponent aus '@packs/common/VanUIComponent'
importiere { VNode } von 'vue'
importiere { Prop } von 'vue-property-decorator'
importiere { CardShadowEnum } aus '@packs/config/card'

@Komponente
exportiere Standardklasse Card erweitert VanUIComponent {
  @Stütze({
    Typ: Zeichenfolge,
    Standard: nicht definiert
  }) öffentliches HeaderPadding !: Zeichenfolge | nicht definiert

  @Stütze({
    Typ: Zeichenfolge,
    Standard: ''
  }) öffentlicher Titel !: Zeichenfolge

  @Stütze({
    Typ: Zeichenfolge,
    Standard: CardShadowEnum.Hover
  }) öffentlicher Schatten !: CardShadowEnum

  öffentlicher statischer Komponentenname = "v-card"

  öffentliches Abrufen von WrapperClassName(): Zeichenfolge {
    Konstantenliste: Zeichenfolge[] = ['v-card__wrapper']

    Liste.push(`Schatten-${ dieser.Schatten }`)

    gibt list.join(' ') zurück
  }

  öffentliches Rendern(): VNode {
    zurückkehren (
      <div Klasse={ dieser.WrapperKlassenname }>
        <div Klasse="v-card__header" Stil={ { padding: this.headerPadding } }>
          {
            dies.$slots.title ? <slot name="title" /> : <div>{ diese.title }</div>
          }
        </div>
        <div Klasse="v-card__body">
          <slot name="Standard" />
        </div>
        <div Klasse="v-card__footer"></div>
      </div>
    )
  }
}

Bei Verwendung dieser v-card in examples :

<Vorlage>
  <v-Karte>
    <template #title>1111</template>
  </v-Karte>
</Vorlage>

<script lang="ts">
Vue von „vue“ importieren
Komponente aus „Vue-Class-Komponente“ importieren

@Komponente
exportiere Standardklasse Components erweitert Vue {

}
</Skript>

<style lang="scss" scoped>
.components__wrapper {
  Polsterung: 20px;
}
</Stil>

Ich habe festgestellt, dass der Browser nach dem Rendern slot -Tag nicht ersetzt:

Kein Slot-Tag-Ersatz

Ich habe einen Tag lang Baidu und Google durchsucht, konnte aber keine Erklärung finden. Nachdem ich die offizielle Dokumentation sorgfältig gelesen hatte, gab es keinen ähnlichen Hinweis. Auch in der Dokumentation des jsx Compilers wurde es nicht klar dargelegt, außer dass angegeben wurde, wie benannte slot verwendet werden.

lösen

Am nächsten Tag kämpfte ich immer noch damit und suchte nach dem Schreiben in UI Komponentenbibliotheken von element-ui und ant-design-vue , konnte jedoch keine entsprechende Möglichkeit finden, slot mit jsx zu verwenden.

Ich wollte nicht aufgeben, änderte den Suchtext und fand schließlich eine Lösung. Ich änderte den Code wie folgt:

...
  öffentliches Rendern(): VNode {
    zurückkehren (
      <div Klasse={ this.wrapperClassName }>
        <div Klasse="v-card__header" Stil={ { padding: this.headerPadding } }>
          {
            dies.$slots.title ?? <div>{ diese.title }</div>
          }
        </div>
        <div Klasse="v-card__body">
          <slot name="Standard" />
        </div>
        <div Klasse="v-card__footer"></div>
      </div>
    )
  }
...

Schauen Sie sich die Browserdarstellung noch einmal an:

Bildbeschreibung hier einfügen

Problemlösung

Nachtrag

Wenn bei Verwendung von jsx / tsx die js Syntax selbst gelöst werden kann oder die Methode selbst this registriert ist, ist js dafür vorzuziehen. Beispielsweise kann v-if / v-else durch雙目運算符ersetzt werden. Dies lässt sich nicht wirklich einfach bewerkstelligen, verwenden Sie daher die Anweisungen von vue , beispielsweise v-show .

Dies ist das Ende dieses Artikels über das Problem, dass der Vue+tsx-Slot nicht ersetzt wird. Weitere relevante Vue+tsx-Slots, die nicht ersetzt werden, finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Informationen zu VUEs Kompilierungsumfang und Slotumfang-Slotproblemen
  • Detaillierte Analyse der Verwendungs- und Anwendungsszenarien von Slots in Vue
  • Tiefgreifendes Verständnis des Slot-Scopes in Vue (für Anfänger geeignet)
  • Lösen Sie das Problem der sekundären Kapselung und des Slot-Renderings der Ant-Design-Vue-Tabelle A-Tabelle
  • Vue-Slot_Besonderheiten Slot, Slot-Scope und Direktive V-Slot Beschreibung
  • Detaillierte Erklärung zur Verwendung von Scoped Slots in Vue.js-Slots

<<:  Beispiel für eine Methode zur Überprüfung des Status einer Linux-Firewall

>>:  Detaillierte Erklärung der Linux-Less-Befehlsbeispiele

Artikel empfehlen

JavaScript zum Erzielen eines einfachen Drag-Effekts

In diesem Artikel wird der spezifische JavaScript...

CentOS 7 SSHD ändern | Root-Login und SSHD-Port-Skriptdefinition verbieten

1. Erstellen Sie einen neuen Benutzer wwweee000 [...

JavaScript Dom implementiert das Prinzip und Beispiel eines Karussells

Wenn wir ein Karussell bauen wollen, müssen wir z...

So stellen Sie mit Docker schnell einen Elasticsearch-Cluster bereit

In diesem Artikel werden Docker Container (orches...

Erste Schritte Tutorial für Anfänger ⑨: So erstellen Sie eine Portal-Website

Darüber hinaus wird eine mit einem Blog-Programm e...

Vue hält den Benutzer angemeldet (verschiedene Token-Speichermethoden)

Inhaltsverzeichnis So setzen Sie Cookies Nachteil...

CSS3-Filtercode zum Erreichen des Grau- oder Schwarzmodus auf Webseiten

Frontend css3.filter kann nicht nur den Graueffek...

Vue implementiert den Schnittstellen-Gleiteffekt

In diesem Artikelbeispiel wird der spezifische Co...

Spezielle Befehle in der MySql-Datenbankabfrage

Erstens: Installation von MySQL Laden Sie die MyS...

DHTML-Objekte (gemeinsame Eigenschaften verschiedener HTML-Objekte)

!DOCTYPE Gibt die Document Type Definition (DTD) ...

Lösung für den MySQL-Fehlercode 1064

Wenn die Wörter in der SQL-Anweisung mit den Schl...