vue3 のコンポーネントの互換性のない変更の詳細な説明

vue3 のコンポーネントの互換性のない変更の詳細な説明

機能コンポーネント

単一ファイルコンポーネント(SFC)<template>の機能属性が削除されました
関数を介してコンポーネントを作成する際の{ functional: true }オプションが削除されました

// 適切な見出し (つまり、h1、h2、h3 など) を提供する <dynamic-heading> コンポーネントを使用します。2.x では、これはおそらく単一のファイル コンポーネントとして記述されます。
// Vue 2 関数コンポーネントの例 export default {
 機能的: 真、
 プロパティ: ['レベル'],
 レンダリング(h, { props, data, children }) {
 h(`h${props.level}`, データ, 子) を返します
 }
}

// <template> を使用した Vue 2 関数コンポーネントの例
<テンプレート機能>
 <コンポーネント
 :is="`h${props.level}`"
 v-bind="属性"
 v-on="リスナー"
 />
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 小道具: ['レベル']
}
</スクリプト>

Vue 3 では、すべての関数コンポーネントは通常の関数を使用して作成されるため、{ functional: true } コンポーネント オプションを定義する必要はありません。
props と context という 2 つのパラメータを受け取ります。コンテキスト パラメータは、コンポーネントの属性、スロット、および発行プロパティを含むオブジェクトです。
さらに、レンダリング関数で h を暗黙的に提供するのではなく、 h がグローバルにインポートされるようになりました。
前述の <dynamic-heading> コンポーネントの例を使用すると、次のようになります。

//vue3.0
'vue' から { h } をインポートします
const DynamicHeading = (props, context) => {
 h(`h${props.level}`, context.attrs, context.slots) を返します
}
DynamicHeading.props = ['レベル']
デフォルトのDynamicHeadingをエクスポートする
// Vue3.0 単一ファイル書き込み <template>
 <コンポーネント
 v-bind:is="`h${$props.level}`"
 v-bind="$attrs"
 />
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 小道具: ['レベル']
}
</スクリプト>

主な違いは

<template> 内のリスナーを削除する機能属性が $attrs の一部として渡され、削除できるようになりました。

非同期コンポーネントの書き方とdefineAsyncComponentメソッド

非同期コンポーネントを明示的に定義するには、defineAsyncComponentヘルパーメソッドを使用します。
コンポーネントオプションの名前がローダーに変更されました
Loader関数自体はresolveとrejuctパラメータを受け入れなくなり、Promiseを返す必要があります。

// vue2.x
// 以前は、非同期コンポーネントは、Promise を返す関数としてコンポーネントを定義することによって作成されていました。const asyncPage = () => import('./NextPage.vue')
// またはオプションとして作成します const asyncPage = {
 コンポーネント: () => import('./NextPage.vue'),
 遅延: 200、
 タイムアウト: 3000、
 エラー: ErrorComponent、
 読み込み中: LoadingComponent
}

// vue3.x
vue3.xでは、defineAsyncComponentを使用してimport{defineAsyncComponent} from 'vue'を定義する必要があります。
'./components/ErrorComponent.vue' から ErrorComponent をインポートします。
'./components/LoadingComponent.vue' から LoadingComponent をインポートします。

// オプションなしの定義メソッド const asyncPage = defineAsyncComponent(() => import('./NextPage.vue'))

// オプション付き非同期コンポーネント constasyncPageWithOptions = defineAsyncCopmonent({
 ローダー: () => import('./NextPage.vue'),
 遅延: 200、
 タイムアウト: 3000、
 エラーコンポーネント: エラーコンポーネント、
 ロードコンポーネント: ロードコンポーネント
})

ローダー関数は、resolve および deny パラメータを受け入れなくなり、常に Promise を返す必要があります。

// vue2.x
const oldAsyncComponent = (解決、拒否) => {}
// vue3.x
const asyncComponent = defineAsyncComponent(() => 新しい Promise((resolve, deny) => {}))

コンポーネントイベントはemitsオプションで宣言する必要がある

Vue3 では、props オプションに似た、emits オプションが提供されるようになりました。このオプションを使用すると、コンポーネントが親オブジェクトに発行するイベントを定義できます。

<!-- vue2.x -->
<テンプレート>
 <div>
 <p>{{ テキスト }}</p>
 <button v-on:click="$emit('accepted')">OK</button>
 </div>
</テンプレート>
<スクリプト>
 エクスポートデフォルト{
 プロパティ: ['テキスト']
 }
</スクリプト>

<!-- vue3.x -->
<!-- props と同様に、emits を使用してコンポーネントによって発行されるイベントを定義できるようになりました -->
<!-- このオプションは、props などの渡されたパラメータを検証するために使用される特定のオブジェクトも受け取ります-->
<!-- 各コンポーネントからのすべての発行を記録することを強くお勧めします。.native 修飾子がない場合、宣言されていないイベントのすべてのリスナーがコンポーネントの $attr に含まれ、デフォルトではコンポーネントのルート ノードにバインドされるためです -->
<テンプレート>
 <div>
 <p>{{ テキスト }}</p>
 <button v-on:click="$emit('accepted')">OK</button>
 </div>
</テンプレート>
<スクリプト>
 エクスポートデフォルト{
 プロパティ: ['テキスト'],
 発行: ['accepted']
 }
</スクリプト>

以上がvue3のコンポーネントの非互換な変更についての詳しい説明です。vue3のコンポーネントの非互換な変更についての詳細は、123WORDPRESS.COMの他の関連記事もご覧ください!

以下もご興味があるかもしれません:
  • Vue マルチ選択リスト コンポーネントの詳細な説明
  • Vue で親子コンポーネントの値を双方向バインドするために v-model を使用するときに発生する問題と解決策
  • トランジションコンポーネントのアニメーション効果を使用した Vue サンプルコード
  • Vueコンポーネントの基本のまとめ
  • Vue の動的コンポーネントと非同期コンポーネントの詳細な理解
  • Vue が Ref を使用してレベル間でコンポーネントを取得する手順
  • Vueはマルチタブコンポーネントを実装します
  • Vue3でスイッチ関数コンポーネントのプロセス全体を簡単に実装する
  • Vue3 でダイアログとモーダル コンポーネントをカスタマイズする方法
  • Vue でコンポーネントを強制的に再レン​​ダリングする正しい方法
  • Vueでコンポーネントを動的に作成する2つの方法

<<:  MySQLバイナリログを介してデータベースデータを復元する方法の詳細な説明

>>:  Nginx 逆生成 Mogilefs 分散ストレージ例の詳細な説明

推薦する

HTML リスト ボックス、テキスト フィールド、ファイル フィールドのサンプル コード

ドロップダウンボックス、テキストフィールド、ファイルフィールド 上半分はデモンストレーション効果、下...

MySQLデーモンの起動に失敗したエラーの解決方法

MySQLデーモンの起動に失敗したエラーの解決方法数日前、公開されたウェブサイトはこれらのアクティビ...

UI を通じて Docker を管理する方法

Docker はますます多くのシナリオで使用されています。コマンドラインツールに慣れていない人にとっ...

MySQL Index Pushdown (ICP) とは何かを理解するための記事

目次1. はじめに2. 原則III. 実践3.1 インデックスプッシュダウンを使用しない3.2 イン...

Vueの計算プロパティの詳細な説明

1. 計算属性とは何ですか? 簡単に言えば、計算された結果が属性に保存されるもので、キャッシュとして...

SQL実行ステップの詳細な分析

SQL実行ステップの詳細な分析まず、ステートメントが実行される順序を見てみましょう。 (8)選択する...

MySQL 8.0.14 のインストールと設定方法のグラフィックチュートリアル (一般)

MySQLサービス8.0.14のインストール(一般)の参考までに、具体的な内容は次のとおりです。イ...

mysql 8.0.18.zip のインストールと構成方法のグラフィック チュートリアル (Windows 64 ビット)

以前にインストールされたバージョンのデータベースをアンインストールする方法については、この記事を参照...

WindowsでのNginxの起動や停止などの基本操作コマンドの詳しい説明

Windows で Nginx を使用するには、Nginx サービスの起動、停止、Nginx のリロ...

nginx ベースのブラウザネゴシエーションキャッシュプロセスの詳細な説明

この記事は主に、nginx に基づいてブラウザネゴシエーションキャッシュを設定する詳細なプロセスを紹...

MySQLデータベースのnullに関する知識ポイントのまとめ

MySQL データベースでは、null は一般的な状況です。MySQL での null に関する注意...

CSS3で蓮の花が咲くアニメーション効果を実現

まずは効果を見てみましょう:この効果は非常に華やかに見えますが、原理は複雑ではありません。1 枚の花...

JavaScript でシンプルなタイマーを実装する

この記事では、参考までに簡単なタイマーを実装するためのJavaScriptの具体的なコードを紹介しま...

CSS レイアウト チュートリアル: 垂直方向の中央揃えを実現する方法

序文最近、フロントエンドの知識をまとめており、いくつかのインタビューにも参加しました。インタビュー中...