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

jQuery simuliert einen Picker, um einen gleitenden Auswahleffekt zu erzielen

In diesem Artikel wird der spezifische Code von j...

Lösen Sie das Problem beim Ausführen von Jupyter Notebook auf dem Server

Inhaltsverzeichnis Auf dem Server läuft Jupyter N...

Drei Möglichkeiten zum Teilen der Komponentenlogik in React

Ohne weitere Umschweife sind dies diese drei Meth...

Lösung für den Fehler bei der Verbindung mit MySQL in Docker

Szenario: Nach der Installation der neuesten Vers...

Detaillierte Erklärung zur Konfiguration der OpenGauss-Datenbank im Docker

Für Windows-Benutzer Verwenden von openGauss in D...

So ändern Sie den Standardspeicherort von Docker-Images (Lösung)

Aufgrund der anfänglichen Partitionierung des Sys...

jQuery realisiert den Effekt der Sitzplatzauswahl und -reservierung im Theater

jQuery realisiert den Effekt der Sitzplatzauswahl...

Detaillierte Zusammenfassung der Übermittlungsmethoden für Webformulare

Sehen wir uns zunächst verschiedene Möglichkeiten...

Das Lazy-Loading-Attributmuster in JavaScript verstehen

Traditionell erstellen Entwickler Eigenschaften i...