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

推薦する

Vue.js ディレクティブのカスタム命令の詳細な説明

デモコマンドをカスタマイズするVue カスタム ディレクティブの構文は次のとおりです。 Vue.di...

MySql でメモリ使用量を削減する方法の詳細な説明

序文デフォルトでは、MySQL はデータベース クエリ データをキャッシュするために大きなメモリ ブ...

Apache Tomcat と IDEA エディターの統合に関する詳細なチュートリアル

1. Apache Tomcat 公式サイトから Tomcat 圧縮パッケージをダウンロードします。...

Linux で binlog ファイルの作成時間を表示するコマンド

目次背景分析する方法背景MySQL は 26 日の 16:23:49 に大量のスロー クエリを生成し...

Vueライフサイクルの違いの詳細な説明

ライフサイクル分類vue の各コンポーネントは独立しており、各コンポーネントには独自のライフサイクル...

MySQL 8.0 ウィンドウ関数の紹介と概要

序文MySQL 8.0 より前は、Oracle、SQL SERVER、PostgreSQL などの他...

Windows 10 1903 エラー 0xc0000135 の解決方法 [推奨]

Windows 10 1903 は、2019 年に Microsoft がリリースした Windo...

CSS3 を使用して楕円軌道の回転を実装するサンプルコード

最近、次のような効果を達成する必要がある最初は、CSS3D回転を使用して記述すると、次の効果しか得ら...

HTML ページ ヘッダー コード例の詳細な説明

知識ポイント1: ヘッダー情報にWebページのベースURLを設定するベース URL の本質は、ハイパ...

Centos 用の rpm パッケージのカスタマイズと yum リポジトリの構築に関するチュートリアル

1 yumでソフトウェアをインストールしたときにダウンロードしたrpmパッケージを保存しますyum ...

シンプルなCSSアニメーションのtransition属性の詳しい説明

1. 遷移属性の理解1. transition 属性は、次の 4 つの遷移プロパティを設定するために...

Vue3 がデータ監視を実装するためにプロキシを使用する理由の分析

Vue データの双方向バインディング原則ですが、この方法には欠点があり、配列とオブジェクトの部分的な...

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

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

CentOS8 デプロイメント LNMP 環境で mysql8.0.29 をコンパイルしてインストールする方法の詳細なチュートリアル

1. 前提条件何度かインストールしているので、エラーについてはこれ以上説明しません。ちょっとわかりに...

DeepinでPyenvをインストールする手順

序文これまでは、/bin/ ディレクトリのソフトリンクを変更して Python のバージョンを切り替...