Vue+tsx のスロット使用の問題が置き換えられない

Vue+tsx のスロット使用の問題が置き換えられない

序文

最近、 UIコンポーネントを作成する予定で、 vue 2.x3.xについてさらに深く理解したいと考えています。

アーキテクチャを構築するときは、すべてのコンポーネントをtsxで記述する準備をしてください。

しかし、 tsxslotの使用中に問題が発生しました

問題を見つける

まず、基本的なcardコンポーネントを作成しました。

card.tsx:

'vue-class-component' からコンポーネントをインポートします。
'@packs/common/VanUIComponent' から VanUIComponent をインポートします。
'vue' から { VNode } をインポートします。
'vue-property-decorator' から { Prop } をインポートします。
'@packs/config/card' から { CardShadowEnum } をインポートします。

@成分
デフォルトクラスCardをエクスポートし、VanUIComponentを拡張します。
  @Prop({
    タイプ: 文字列、
    デフォルト: 未定義
  }) パブリック ヘッダーパディング !: 文字列 | 未定義

  @Prop({
    タイプ: 文字列、
    デフォルト: ''
  }) パブリックタイトル !: 文字列

  @Prop({
    タイプ: 文字列、
    デフォルト: CardShadowEnum.Hover
  }) パブリックシャドウ !: CardShadowEnum

  パブリック静的コンポーネント名 = 'v-card'

  パブリックラッパークラス名()を取得します: 文字列 {
    定数リスト: 文字列[] = ['v-card__wrapper']

    リストをプッシュします(`shadow-${ this.shadow }`)

    リストを返します。join(' ')
  }

  パブリックレンダリング(): VNode {
    戻る (
      <div クラス = { this.wrapperClassName }>
        <div class="v-card__header" style={ { padding: this.headerPadding } }>
          {
            this.$slots.title ? <slot name="title" /> : <div>{ this.title }</div>
          }
        </div>
        <div class="v-card__body">
          <スロット名="デフォルト" />
        </div>
        <div class="v-card__footer"></div>
      </div>
    )
  }
}

examplesでこのv-card使用する場合:

<テンプレート>
  <vカード>
    <テンプレート #title>1111</テンプレート>
  </v-card>
</テンプレート>

<script lang="ts">
'vue' から Vue をインポートします
'vue-class-component' からコンポーネントをインポートします。

@成分
デフォルトのクラスをエクスポートし、ComponentsをVueに拡張します。

}
</スクリプト>

<style lang="scss" スコープ>
.components__wrapper {
  パディング: 20px;
}
</スタイル>

レンダリング後、ブラウザがslotタグを置き換えないことがわかりました。

スロットタグの交換なし

Baidu と Google で 1 日検索しましたが、説明が見つかりませんでした。公式ドキュメントを注意深く読んでも、同様のヒントはありませんでした。jsx jsxのドキュメントにも、名前付きslotの使用方法を除いて明確に記載されていませんでした。

解決する

翌日、私はまだこれに苦労しており、 element-uiant-design-vueUIコンポーネントライブラリでの記述方法を調べましたが、 jsxを使用してslotを使用する対応する方法を見つけることができませんでした。

諦めきれず、検索テキストを変更してようやく解決策を見つけました。コードを次のように変更しました。

...
  パブリックレンダリング(): VNode {
    戻る (
      <div クラス = { this.wrapperClassName }>
        <div class="v-card__header" style={ { padding: this.headerPadding } }>
          {
            this.$slots.title ?? <div>{ this.title }</div>
          }
        </div>
        <div class="v-card__body">
          <スロット名="デフォルト" />
        </div>
        <div class="v-card__footer"></div>
      </div>
    )
  }
...

ブラウザのレンダリングをもう一度確認してください。

ここに画像の説明を挿入

問題解決

追記

jsx / tsxを使用する場合、 js構文自体が解決できる場合、またはメソッド自体がthisに登録されている場合は、 jsが優先されます。たとえば、 v-if / v-else雙目運算符に置き換えることができます。実際にこれを行う簡単な方法はないので、 v-showなどのvueのディレクティブを使用します。

Vue+tsx 使用スロットが置換されない問題については、これで終わりです。Vue+tsx スロットが置換されない問題の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • VUE のコンパイル スコープとスロット スコープのスロットの問題について
  • Vue のスロットの使用法と適用シナリオの詳細な分析
  • Vue のスロットスコープの詳細な理解(初心者向け)
  • ant design vue table a-tableの二次カプセル化とスロットレンダリングの問題を解決する
  • Vue slot_特別な機能スロット、スロットスコープ、ディレクティブv-slotの説明
  • Vue.js スロットにおけるスコープ付きスロットの使用法の詳細な説明

<<:  MySQL 5.7.27 のインストールと設定方法のグラフィックチュートリアル

>>:  mysql ERROR 1045 (28000) 問題の解決方法

推薦する

2019 年に最も役立ち重要なオープンソース ツール トップ 10

Black Duck の 2017 年のオープンソース調査では、回答者の 77% がオープンソース...

ウェブページの読みやすさを向上させるいくつかの方法

1. 対照的な色を使用します。ここでのコントラストとは、テキストの色と背景色のコントラストを指します...

Facebookの情報アーキテクチャの分析

<br />原文: http://uicom.net/blog/?p=762 Faceb...

HTML テーブルタグチュートリアル (26): セルタグ

<TD> タグの属性は、テーブル内のセルのプロパティを設定するために使用されます。表 &...

MySQL/MariaDB でピボット テーブルを実装する方法のサンプル コード

前回の記事では、Oracle でピボット テーブルを実装するいくつかの方法を紹介しました。今日は、同...

MySQL 8.0.11 MacOS 10.13 のインストールと設定方法のグラフィックチュートリアル

MacにMySQLデータベースをインストールし、環境変数を設定する手順を参考までに記録します。具体的...

winx64 での mysql5.7.19 の基本的なインストール プロセス (詳細)

1. ダウンロード参考: https://www.jb51.net/softs/451120.ht...

nginx + セカンダリドメイン名 + https サポートを使用する

ステップ1: Alibaba Cloudプライマリドメイン名にセカンダリドメイン名を追加する2 番目...

一般的なDockerコマンドの詳細な説明

1. ヘルプコマンド1. 現在のDockerバージョンを表示する docker バージョン2. イメ...

同期スクロールを実現するための複数のテーブル要素のサンプルコード

Element UIは、複数のテーブルを同時に水平および垂直にスクロールすることを実装します。 コー...

WebページでjQueryを参照する方法

CDN(コンテンツ配信ネットワーク)を通じて参照できます。 jQuery は Google と Mi...

Reactフックの長所と短所

目次序文アドバンテージ:欠点: 1. レスポンシブな使用効果2. ステータスが同期されていないRea...

Nginx Rewriteモジュールを使用するいくつかのシナリオ

アプリケーションシナリオ1: ドメイン名ベースのリダイレクト会社の古いドメイン名は www.accp...

CentOS 7 ブートカーネルの切り替えとブートモードの切り替えの説明

Centos7 スイッチブートカーネル注: 必要に応じて、最初にyum update -yを実行して...

HTMLは入力完了を検出する機能を実装する

入力が進行中かどうかを検出するには、「onInput(event)」を使用しますコンテンツが変更され...