隠れた危険
- Vue3 がデータ応答性を実装する方法は、
Proxy
IE11 より前のバージョンに存在することです。兼容性问题
- フレームワークの一番下でリファクタリングが多く行われ、多くの API が追加および削除されています. これらの場所は、プログラムの動作を保証するために変更する必要があります.
- vue 関連のプラグインやサードパーティのプラグインなど、依存関係もアップグレードする必要があります。
アップグレード手順
合格工具+手动
第一歩:
まずはVue2のフレームワークをまるごとVue3にバージョンアップし、Vue3も互換性があるのでOption Api
、コード構造を一時的に調整してから公式推奨のものに変更します。Composition Api
ステップ2:
Vue 関連の依存関係をアップグレードし、Vue/Vuex/Vue-router/Vue 编译工具
ステップ 3:
Vue3 でサポートされなくなった API と構文を変更して置き換えます。たとえば、フィルターはサポートされなくなり、v-model の使用法も変更されました。
ステップ 4:
サードパーティのコンポーネント ライブラリやプラグインなどの依存関係を Vue3 に適合するバージョンにアップグレードする
ステップ 5:
プロジェクト コードの構文が正しくコンパイルされていることを確認したら、コード内のビジネス ロジックが正しいかどうかを確認して、プロジェクトを完全に実行できるようにする必要があります。
ステップ 6:
TypeScript を使用して JS コードをリファクタリングする: TypeScript は JavaScript よりも静的な型チェックが多く、新しい構文もいくつか追加されています。ただし、この手順は時間がかかりますが (JS コードを 1 回変更するのと同等であるため)、JS と TS はプロジェクト内に同時に存在できるため、徐々に置き換えることができます。
アップグレードツール
オープン ソース ツールのgogocode
ドキュメントを介して、上記の手順 1、2、および 3 の変換を実行できます。
ps : ツール変換コードには不明な点が多く、より複雑なプロジェクト ビジネス コード (フォームのリンク、ルールの検証など) の一部は、元のロジックに影響を与える可能性があり、1 つずつ手動で比較およびテストする必要があります。一。
アップグレードに必要な変更
1.グローバルAPI
- アプリケーション インスタンスを使用するようにグローバル Vue API が変更されました
- グローバルおよび内部 API は、サポートするためにリファクタリングされました。
tree-shake
2. テンプレート ディレクティブ
- コンポーネントの
v-model
使用法が変更されて置き換えられましたv-bind.sync
<template v-for>
および非v-for
ノードでの使用法がkey
変更されました- 同じ要素で使用される
v-if
とv-for
優先順位が変更されました (v-if
より大きいv-for
) v-bind=“object”
センシティブなソートv-on:event.native
修飾子が削除されましたv-for
ref
`ref 配列はもはや登録されていません
3. コンポーネント
- 機能部品は通常の機能でしか作成できない
functional attribute
単一ファイル コンポーネント (SFC) の<template>
およびfunctional
で廃止予定defineAsyncComponent
メソッドを使用して非同期コンポーネントを作成する必要がある- コンポーネント イベントを
emits
オプション
4. レンダリング機能
- レンダリング関数 API の変更
$scopedSlots property
削除され、すべてのスロットが関数$slots
として$listeners
削除または統合されました$attrs
$attrs
現在含まclass
れてstyle attribute
5. カスタム要素
- テンプレートのコンパイル時にカスタム要素の検出が実行されるようになりました
is attribute
特別な使用法は、予約済みの<component>
タグに厳密に限定されています
6.その他のマイナーチェンジ
destroyed
ライフサイクル オプションの名前が に変更されましたunmounted
beforeDestroy
ライフサイクル オプションの名前が に変更されましたbeforeUnmount
default prop
ファクトリ関数はこのコンテキストにアクセスできなくなりました- カスタム ディレクティブの API は、コンポーネントのライフサイクルに合わせて変更され、削除
binding.expression
されました data
オプションは常に関数として宣言する必要がありますmixin
からのオプションはdata
浅いマージになりましたAttribute
適用ポリシーが変更されました- 一部のトランジショナル の名前が変更され
class
ました <TransitionGroup>
ラッパー要素はデフォルトでレンダリングされなくなりました- 配列をリッスンするとき、コールバックは配列が置き換えられたときにのみ起動します。変更時に起動する必要がある場合は、ディープ オプションを指定する必要があります
- 特別なディレクティブ (v-if/else-if/else、v-for、または v-slot) のないタグは
<template>
、通常の要素として扱われ、レンダリングされるようになりました - 内部コンテンツをレンダリングする代わりのネイティブ
<template>
要素。 - マウントされたアプリケーションは、それがマウントされている要素を置き換えません
- ライフサイクルの
hook:
イベントのように変更されます。vnode-
7. 削除された API
keyCode
v-on
修飾子としてサポートon、off
および$once
インスタンスメソッド- フィルター
- インライン テンプレート
attribute
$children
例property
propsData
オプション$destroy
インスタンスメソッド。ユーザーは、個々の Vue コンポーネントのライフサイクルを手動で管理する必要がなくなりました。- グローバル関数
set
およびdelete
インスタンス メソッド$set
および$delete
. プロキシベースの変更検出では不要になりました - Element および Element Plus のフレームワークも変更されています. Element Plus のドキュメントを参照してコンポーネントの使用法を調整してください.