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自動フォーマットの問題を解決する

推薦する

iframe を使用して Web ページに天気の影響を表示します

CS: ...コードをコピーコードは次のとおりです。 *{マージン:0;パディング:0;リストスタイ...

URL 内の特殊記号の意味を知っていますか?

1.# # は Web ページ内の場所を表します。右側の文字はその位置の識別子です。たとえば、ht...

Windows 10 での MySQL 5.7.21 インストーラのインストール グラフィック チュートリアル

MySQLをインストールしてメモしておきます。うまくインストールできるか分かりませんが、試してみます...

HTMLとCSSを使用して、自分だけの暖かい男「Dabai」を作成します

最終結果はこんな感じです、かわいいでしょう… PS: HTML と CSS の知識があればベストです...

ウェブページでメモの詳細が灰色になる問題に対処する

1. IE では、相対的な配置、つまり <div style="background...

Ubuntu 18.04はルート権限を取得し、ルートユーザーとしてログインします

事前に書いておきます:次の手順では、ターミナルにコマンドを入力する必要があります。コンピューターでブ...

SCSS スタイルのコードを 50% 削減する 14 の実践的な経験

序文Sass は CSS3 言語の拡張機能です。Sass を使用すると、より良いスタイルシートをより...

Nginx 書き換えジャンプの適用シナリオの詳細な説明

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

熟練デザイナーの7つの原則(1):フォントデザイン

まあ、あなたはデザインの達人かもしれませんし、あるいはそれは大げさすぎるかもしれませんが、少なくとも...

js配列forEachインスタンスの詳細な使用方法

1. forEach() は map() に似ています。これも渡された関数に各要素を順番に適用します...

別の種類の「キャンセル」ボタン

「キャンセル」ボタンは必要な操作プロセスの一部ではなく、デザイン上の主要な要素として表示されません...

CSS のフローティング サンプル コードをクリアする方法

概要この記事のフレームワーク図は次のとおりです。 1. フローティングとは一体何でしょうか? W3s...

Postman 自動インターフェーステストの実践

目次背景説明GETリクエストの作成事前リクエストスクリプトで署名を作成するスクリプトは環境変数に書き...

Javascriptでビルダーパターンを実装する方法

概要ビルダー パターンは比較的単純なデザイン パターンであり、作成パターンに属します。定義: 複雑な...

Vue シングルページ SEO の 4 つのソリューションについての簡単な説明

目次1.Nuxtサーバーサイドレンダリングアプリケーションの展開(SSRサーバーレンダリング)利点:...