Vue.jsのレンダリング関数の使い方の詳しい説明

Vue.jsのレンダリング関数の使い方の詳しい説明

Vue では、ほとんどの場合、テンプレートを使用して HTML を作成することを推奨しています。ただし、シナリオによっては、テンプレートよりもコンパイラに近いレンダリング関数である JavaScript の完全なプログラミング能力が本当に必要になります。

HTMLレベルでは、コンポーネントインターフェースを次のように定義することにしました。レベル1~6を渡してh1~h6タグを生成し、スロットを使用してコンテンツを生成します。

<div id="div1">
    <child :level="1">こんにちは世界!</child>
</div>

<script type="text/x-template" id="子テンプレート">
  <h1 v-if="レベル === 1">
    <スロット></スロット>
  </h1>
  <h2 v-if="レベル === 2">
    <スロット></スロット>
  </h2>
  <h3 v-if="レベル === 3">
    <スロット></スロット>
  </h3>
  <h4 v-if="レベル === 4">
    <スロット></スロット>
  </h4>
  <h5 v-if="レベル === 5">
    <スロット></スロット>
  </h5>
  <h6 v-if="レベル === 6">
    <スロット></スロット>
  </h6>
</スクリプト>

<script type="text/javascript">
    /**
     * 子コンポーネントをグローバルに登録します。テンプレート値が # で始まる場合はオプション シンボルとして使用され、一致する要素の innerHTML がテンプレートとして使用されることに注意してください。よくあるトリックは、<script type="x-template"> を使用してテンプレートを組み込むことです。これの利点は、HTML が内部のコンテンツをレンダリングしないことです。* 
     * ここでテンプレートを使用するのは最善の選択ではありません:
     * 1. コードが長い* 2. 異なるタイトルにコンテンツを挿入するにはスロットを繰り返し使用する必要がある 
     * 3. コンポーネントにはルート要素が必要なので、タイトルとコンテンツは <div><h1>hello world</h1></div> のような無駄な div で囲まれます。
     */

    Vue.component('child', {
      テンプレート: '#child-template',
      小道具: {
        レベル:
          タイプ: 数値、
          必須: true
        }
      },
      データ: 関数() {
        戻る {
          1: 1
        }
      }
    })

    新しいVue({
        el:"#div1"
    })
  </スクリプト>

上記の例を render 関数を使用して実装してみます。render関数を使用する場合、テンプレート オプションは無視されることに注意してください。

createElement は 3 つのパラメータを受け取ります。

最初のパラメータは HTML タグ名、コンポーネント、または関数にすることができます。このパラメータは必須です。
2 番目はデータ オブジェクト {Object} (オプション) です。

次に例を示します。

<div id="div1">
    <子:レベル="1">
        こんにちは世界!
    </子>
    <子:レベル="2">
        <!-- 表示されません -->
        <span slot="footer">これはフッタースロットです</span>
        <p slot="header">これはヘッダースロットです</p>
    </子>
</div>


<スクリプト>
    Vue.component('child', {
        レンダリング: 関数 (createElement) {
            console.log(this.$slots);
            要素の作成を返す(
                'h' + this.level, // tagName タグ名 {
                    // 各hタグのクラスを設定する
                    'クラス': {
                        foo: 真、
                        バー: 偽
                    },
                    //最終的にインラインスタイルとしてレンダリングされます style: {
                        色: '赤'、
                        フォントサイズ: '14px'
                    },
                    // その他の HTML 属性 attrs: {
                        id: 'foo',
                        'データID': 'バー'
                    },
                    // DOM属性domProps: {
                        // innerHTML: 'domPropsから',
                    },
                    // "on" に基づくイベント リスナー
                    // そのため、v-on:keyup.enter on: { などの修飾子はサポートされなくなりました。
                        クリック: this.clickHandler
                    },
                    // ...
                },
                // this.$slots から VNodes リストの静的コンテンツを取得できます // $slots.default はコンポーネントの名前のないスロットにアクセスするために使用されます
                // 名前付きスロットが必要な場合、スロット名を指定する必要があります。this.$slots.header
                // [this.$slots.default,this.$slots.footer,this.$slots.header] //レベル2のスロットを表示 [this.$slots.default] //名前のないスロットのみを表示
            )
        },
        template: '<div v-if="level===1"><slot></slot></div>', // 無視されます props: {
            レベル:
                タイプ: 数値、
                必須: true
            }
        },
        メソッド: {
            クリックハンドラ: 関数 () {
                コンソールログ('clickHandler')
            }
        }
    })

    新しいVue({
        el: "#div1"
    })
</スクリプト>

レンダリングは次のようになります。

ここに写真の説明を記入してください

Vue.js の render 関数の詳しい使い方については、これで終了です。Vue.js の render 関数に関するより詳しい内容については、123WORDPRESS.COM の過去記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • VUE レンダリング機能の使い方と詳細な説明
  • Vue Render関数はDOMノードコード例を作成します
  • Vueレンダリング関数の実際の戦闘でタブタブコンポーネントを実装する
  • Vue のレンダリング関数の使い方の詳細な説明
  • Vueのレンダリング関数の使い方
  • VUEのレンダリング機能の使い方を理解する
  • Vueにレンダリング関数の実装を導入する理由

<<:  Linux で AIDE に基づいてファイルシステムの整合性を検出する方法

>>:  MySQL OOM (メモリオーバーフロー) の解決策

推薦する

MySQLデータベース最適化技術の簡単な紹介

成熟したデータベース アーキテクチャは、最初から高可用性、高スケーラビリティなどの機能を備えて設計さ...

ウェブページの背景色を制御する CSS コード

誰もが自分の Web ページの背景にふさわしい画像を見つけることに悩むことが多いと思います。これは事...

HTML/CSSにおける記号論の詳細な説明

この記事では、ソシュールの言語哲学などの理論に基づいて、CSS の class 属性は不要であると主...

Vueナンバープレート検索コンポーネントの使い方の詳しい説明

参考までに、シンプルなナンバープレート入力コンポーネント(vue)です。具体的な内容は次のとおりです...

MySql インデックスはクエリ速度を向上させる一般的な方法のコード例

インデックスを使用してクエリを高速化する1. はじめにWeb 開発には、ビジネス テンプレート、ビジ...

Linux で 1 回限りのスケジュールされたタスクを実行するための at コマンドの使用に関する詳細な説明

目次序文1. 一度限りの計画タスクの紹介2. コマンド3. 1回限りのスケジュールタスクを作成する4...

jQuery カスタム虫眼鏡効果

この記事の例では、jQueryのカスタム虫眼鏡効果の具体的なコードを参考までに共有しています。具体的...

Mac に Windows サービスを備えた仮想マシンをインストールする方法

1. 仮想マシンをダウンロードする公式ダウンロードウェブサイト: https://www.vmwar...

CentOS 7.2 に SuPHP をインストールするための詳細な手順

デフォルトでは、CentOS 7 上の PHP は apache または nobody として実行さ...

Reactエラー境界コンポーネント処理

React 16の内容です。最新技術ではありませんが、ドキュメントで調べるまであまり話題に上がらなか...

カルーセル効果を実現するための純粋なjs

この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体...

MySQLの水平および垂直テーブルパーティションの説明

前回の記事で、MySQL ステートメントの最適化には限界があると述べました。MySQL ステートメン...

MySQLデータベースでスロークエリログを有効にする方法の詳細な説明

データベースはスロークエリログを有効にします設定ファイルを変更する設定ファイルmy.iniに次の2つ...

MySQLレジストリをクリアする方法

具体的な方法: 1. [ win+r ] を押して実行ウィンドウを開き、「regedit」と入力して...

MySQLチュートリアルではストアドプロシージャを徹底的に理解します

目次1. ストアドプロシージャに関連する概念2. ストアドプロシージャの使用1) ストアドプロシージ...