Vue h関数の使い方の詳しい説明

Vue h関数の使い方の詳しい説明

1. 理解

ドキュメント: https://v3.cn.vuejs.org/guide/render-function.html#dom-%E6%A0%91

h() は正確には何を返すのでしょうか?実際には実際の DOM 要素ではありません。より正確な名前は createNodeDescription かもしれません。これは、そこに含まれる情報が、子ノードの説明情報など、ページにレンダリングする必要があるノードの種類を Vue に伝えるためです。このようなノードは「仮想ノード」と呼ばれ、多くの場合 VNode と略されます。 「仮想 DOM」とは、Vue コンポーネント ツリーによって構築される VNode ツリー全体のことです。

2. 使用

ドキュメント: https://v3.cn.vuejs.org/guide/render-function.html#h-%E5%8F%82%E6%95%B0

1. h() パラメータ

h() 関数は、VNode を作成するためのユーティリティです。おそらく、より正確には createVNode() という名前が付けられるかもしれませんが、頻繁に使用され、簡潔であるため、h() と呼ばれます。次の 3 つのパラメータを受け入れます。

 // @returns {VNode}
h(
    // {文字列 | オブジェクト | 関数} タグ
    // HTML タグ名、コンポーネント、非同期コンポーネント、または // 機能コンポーネント。
    //
    // 必須。
    'div',

    // {オブジェクト} プロパティ
    // 属性、プロパティ、イベントに対応するオブジェクト。
    // これはテンプレートで使用されます。
    //
    // オプション(開発中は渡すことをお勧めします。渡す必要がない場合は null を渡します)
    {},

    // {文字列 | 配列 | オブジェクト} 子
    // `h()` を使用して構築されたサブ VNode、
    // または、文字列を使用して「テキスト VNode」またはスロットを持つオブジェクトを取得します。
    //
    // オプション。
    [
        「テキストが先に来ます。」
        h('h1', '見出し'),
        h(MyComponent, {
            いくつかのプロパティ: 'foobar'
        })
    ]
)

2. 使い方が簡単

3. カウンターケースを実装する

<スクリプト>
/* スタイルを設定するには、ここでインポートする必要があります。スタイルタグを使用する場合、scoped を記述できず、ローカルスタイルの設定に役立たないため、推奨されません */
「./style.css」をインポートします
"vue" から { h, ref } をインポートします。

エクスポートデフォルト{
    // データの書き込み方法 // data() {
    // 戻る {
    // カウンター: 0
    // }
    // },
    設定() {
        定数カウンタ = ref(0)
        戻り値 { カウンター }
    },
    /**
     * セットアップを使用する場合、以下でもこれを使用できます。レンダリングのインポートにはこの境界があるため、次の値ではこれを使用する必要があります。
     */
    与える() {
        h("div", null, [ を返します。
            h("h1", null, `現在のカウント: ${this.counter}`),
            h("button", { onClick: () => this.counter++, class: "button" }, "1を追加"),
            h("button", { onClick: () => this.counter--, class: "button" }, "マイナス1")
        ])
    }
}
</スクリプト>

純粋なセットアップ記述に変更します。

 <スクリプト>
/* スタイルを設定するには、ここでインポートする必要があります。スタイルタグを使用する場合、scoped を記述できず、ローカルスタイルの設定に役立たないため、推奨されません */
「./style.css」をインポートします
"vue" から { h, ref } をインポートします。

エクスポートデフォルト{
    // データの書き込み方法 // data() {
    // 戻る {
    // カウンター: 0
    // }
    // },
    設定() {
        定数カウンタ = ref(0)
        戻り値 () => {
            h("div", null, [ を返します。
                h("h1", null, `現在のカウント: ${counter.value}`),
                h("button", { onClick: () => counter.value++, class: "button" }, "1を追加"),
                h("button", { onClick: () => counter.value--, class: "button" }, "マイナス1")
            ])
        }
    }
}
</スクリプト>

4. 関数コンポーネントとスロットの使用

1) 親コンポーネント

<スクリプト>
"vue" から { h, ref } をインポートします。
「./components/Test.vue」からテストをインポートします。
エクスポートデフォルト{
    設定() {
        戻る {}
    },
    与える() {
        h(Test, null, { を返す
            // default は関数に対応し、default はデフォルト スロットです。default: props => h("span", null, "親によってコンポーネントに渡されるコンテンツ:" + props.name)
        })
    }
}
</スクリプト>

2) サブコンポーネント

<スクリプト>
"vue" から { h } をインポートします。

エクスポートデフォルト{
    /**
     * 夫から渡された内容を受け取る */
    与える() {
        h("div", null, [ を返します。
            h("div", null, "私は子コンポーネントです"),
            /**
             * ここで、他のものが渡されたかどうかを判断できます * 何も表示しない場合は null と書くこともできます * パラメータを渡す関数を使用して、パラメータを渡すこともできます */
            this.$slots.default ? this.$slots.default({ name: "哈哈哈哈" }) : h("div", null, "私は子コンポーネントのデフォルト値です")
        ])
    }
}
</スクリプト>

注意:プロジェクトでは、上記のようなコードを書くと面倒すぎるので、現時点では JSX を使用する必要があります。

3. JSXの使用

1. JSXの理解

通常、jsx は Babel を介して変換されます (React で記述された jsx は Babel を介して変換されます)。

Vue の場合、Babel で対応するプラグインを設定するだけで済みます。

ドキュメント: https://v3.cn.vuejs.org/guide/render-function.html#jsx

2. Vue をサポートするために Babel プラグインをダウンロードします (現在はスキャフォールディングが直接サポートしているようです)

 npm で @vue/babel-plugin-jsx をインストール -D

3. babelを設定する

1) ルートディレクトリに.babel.config.jsを作成します。

2) .babel.config.jsに次のコードを追加します。

モジュール.エクスポート = {
    プリセット: [
        "@/vue/cli-plugin-babel/プリセット"
    ]、
    プラグイン: [
        "@vue/babel-plugin-jsx"
    ]
}

4. 使いやすい

<スクリプト>
'vue' から { ref } をインポートします
エクスポートデフォルト{
    設定() {
        カウンタ = ref(0) とします
        戻り値 { カウンター }
    },
    与える() {
        戻る (
            <div>
                <div>JSX の使用</div>
                <h2>現在の番号: {this.counter}</h2>
            </div>


        )
    }
}
</スクリプト>

5. 反論ケース

<スクリプト>
'@vue/reactivity' から { ref } をインポートします。

エクスポートデフォルト{
    設定() {
        カウンタ = ref(0) とします
        関数add(){
            カウンタ値++
        }
        関数デクリメント() {
            カウンタ値--
        }
        戻り値 { カウンタ、加算、減算 }
    },
    与える() {
        戻る (
            <div>
                <div>JSX の使用</div>
                <h2>現在の番号: {this.counter}</h2>
                <button onClick={this.add}>1 を追加</button>
                <button onClick={this.decrement} >1 減らす</button>
            </div>
        )
    }
}
</スクリプト>

6. コンポーネントとスロットの使用

1) 親コンポーネント

<スクリプト>
'@vue/reactivity' から { ref } をインポートします。
「./components/Test.vue」からテストをインポートします。
エクスポートデフォルト{
    設定() {
        カウンタ = ref(0) とします
        関数add(){
            カウンタ値++
        }
        関数デクリメント() {
            カウンタ値--
        }
        戻り値 { カウンタ、加算、減算 }
    },
    与える() {
        戻る (
            <div>
                <div>JSX の使用</div>
                このブロックがセットアップで変数またはメソッドを使用する場合は、これを追加します */
                <h2>現在の番号: {this.counter}</h2>
                <button onClick={this.add}>1 を追加</button>
                <button onClick={this.decrement} >1 減らす</button>
                <時間 />
                <テスト>
                    渡されたコンテンツをここに書き込みます。つまり、スロットに渡します。*/
                    {{ default: props => <p>親から子に渡されます</p> }}
                </テスト>
            </div>
        )
    }
}
</スクリプト>

2) サブコンポーネント

<スクリプト>
エクスポートデフォルト{
    /**
     * 夫から渡された内容を受け取る */
    与える() {
        戻る (
            <div>
                <p>私はコンポーネントです</p>
                この作品は着用されない可能性があり、デフォルト値を表示する必要があります。この場合、三項演算子を使用する必要があります*/
                {this.$slots.default()}
            </div>
        )
    }
}
</スクリプト>

注意: h 関数を使用してコンポーネントを記述する場合は、ドキュメントをよくお読みください。上記の説明は初心者向けです。

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

以下もご興味があるかもしれません:
  • vue2.x の徹底研究 - h 関数の説明

<<:  Dockerの匿名マウントと名前付きマウントの具体的な使用法

>>:  vscodeで保存した後のHTML自動フォーマットの問題を解決する

推薦する

js と jQuery での Ajax の使用例の詳細

目次ネイティブJS GETリクエストの送信方法投稿リクエストの送信方法パラメータ付きのGETリクエス...

Ubuntu 18.04 コマンドでタッチパッドを無効/有効にする

Ubuntu では、ショートカット キーでタッチパッドをオフにできない状況によく遭遇します。この問題...

Docker Compose のサイドカーモードの詳細な説明

目次Docker Composeとは要件に不適切な言語が使用されている実装Docker Compos...

docker-compose を使用して mongodb と mysql を構築する詳細なプロセス

docker-compose で mongodb と mysql を構築する詳細な方法を見てみましょ...

JavaScript Promise の徹底解説

目次1. Promise とは何ですか? 2. なぜ Promise が存在するのでしょうか? 3つ...

トップナビゲーションバーメニューを作成するためのHTML+CSS

ナビゲーションバーの作成:技術要件: CS HTMLタグ達成目的:ナビゲーションバーメニューの作成コ...

安全な構成のためにDockerでTLSを有効にする手順

序文以前、Docker の 2375 Remote API を有効にしていました。会社のセキュリティ...

フロントエンドはJavaScriptを通じてCADグラフィックスの詳細を作成および変更します。

目次1. 現状2. JSでCADグラフィックを作成および変更する2.1 サポートされているCADエン...

scss で mixin が動作しない問題の解決方法 (ブラウザでコンパイルできない)

ミックスインメソッド: ブラウザはコンパイルできません: 以前のバージョンのsassでは上記の記述方...

MySQL インポート csv エラーの 4 つの解決策

これは今日私が踏んだ4つの落とし穴を記念したものです...落とし穴1:地元のせいエラー:エラー 39...

Vue+SpringBoot で Alipay サンドボックス決済を実装するためのサンプルコード

まず、Alipay サンドボックスから一連のものをダウンロードします。多くのブログで取り上げられてお...

Vue ページに img 画像を導入する方法

HTMLを学ぶとき、画像タグ<img>は画像を導入します <img src=&qu...

フロントエンドの面接でよく聞かれる JavaScript の質問の完全なリスト

目次1. 手書きのインスタンス2.配列のマップメソッドを実装する3. Reduceは配列のmapメソ...

MySQL サーバー IO 100% 分析および最適化ソリューション

序文ストレス テスト中に、リソース使用のボトルネックによって発生する最も直接的なパフォーマンスの問題...

Linux の一般的な Java プログラム起動スクリプトのコード例

シェルを起動する頻度は非常に低いですが。 。 。しかし、書くたびに、多くの jar ファイル パスを...