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 分散ストレージ例の詳細な説明

推薦する

大規模な MySQL テーブルに対する count() の実装を最適化しました

以下は、B+ ツリーのデータ構造と実験結果からの推測に基づいた私の判断です。間違いがあればご指摘くだ...

CentOS 6.x のインストール時に発生するエラー「ディスク sda に BIOS RAID メタデータが含まれています」の解決方法

今日、CentOS6.2 をインストールしていたところ、ハード ドライブの検出段階を通過できませんで...

ウェブサイトはグレー表示されています。画像を含む互換コードはすべてのブラウザをサポートしています

通常、国喪の日、大地震の日、清明節には、ウェブサイト全体を灰色にして、故人への哀悼の意を表します。そ...

Vue+echarts でプログレスバーのヒストグラムを実現

この記事では、プログレスバーヒストグラムを実現するためのvue+echartsの具体的なコードを参考...

MySQL の遅いクエリの例

導入スロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメントを記録で...

ウェブフロントエンドコードを書く際の考慮事項のまとめ

1. HTMLタグの前に次のような文を追加するのが最適です。 <!DOCTYPE HTML P...

Bootstrap 3.0 学習ノート グリッドシステム事例

序文前回の記事では、主にグリッドシステムの基本原理を学び、簡単なケースを通してその原理を実践しました...

MySQL の 4 つのトランザクション分離レベルを例を使って分析する

序文データベース操作では、同時データ読み取りの正確性を効果的に保証するために、トランザクション分離レ...

MySQL 5.7.9 バージョンの sql_mode=only_full_group_by 問題を解決する

MySQL 5.7.9 バージョンの sql_mode=only_full_group_by の問題...

MySql 8.0.16-win64 インストール チュートリアル

1. ダウンロードしたファイルを以下のように解凍します。 。 2. 環境変数に解凍ディレクトリを追加...

VUEのデータプロキシとイベントの詳細な説明

目次Object.defineProperty メソッドのレビューデータブローカーとは何ですか? V...

HTMLデザインパターンの日々の勉強ノート

HTML デザインパターン学習ノート今週は主にHTMLデザインパターンを学びました。学習内容をまとめ...

ホストがアクセスできるようにMySQLの権限を変更する方法

mysqlのリモートアクセス権を有効にするデフォルトでは、MySQL ユーザーにはリモート アクセス...

Vueカスタムツリーコントロールの使い方の詳細な説明

この記事では、Vueカスタムツリーコントロールの使い方を参考までに紹介します。具体的な内容は次のとお...