# はじめに
INFO
Vue.js を使うのは初めてですか? エッセンシャルガイド を参考に使い始めてみてください。
このガイドは主に、Vue 3 の新機能と変更点について学びたい Vue 2 の経験があるユーザーを対象としています。 Vue 3 を試す前にこのガイドを上から下まで読む必要はありません。 多くの変更があったように見えますが、Vue についてあなたが知っていて愛していることの多くは同じままです。 しかし、私たちは可能な限り徹底し、文書化されたすべての変更について詳細な説明と例を提供したいと考えました。
# 概要
Vue Mastery (opens new window) で Vue 3 を学び始める。
# クイックスタート
CDN 経由:
<script src="https://unpkg.com/vue@next"></script>Codepen (opens new window) 上のブラウザ内プレイグラウンド
CodeSandbox (opens new window) 上のブラウザ内サンドボックス
Vite (opens new window) を使った Scaffold:
npm init @vitejs/app hello-vue3 # OR yarn create @vitejs/app hello-vue31vue-cli (opens new window) を使った Scaffold:
npm install -g @vue/cli # OR yarn global add @vue/cli vue create hello-vue3 # select vue 3 preset1
2
3
# 注目すべき新機能
Vue 3 で注目すべきいくつかの新機能の次のとおりです。
- Composition API
- Teleport
- Fragments
- Emits Component Option
- カスタムレンダラを作るための
@vue/runtime-coreのcreateRendererAPI (opens new window) - SFC での Composition API の Syntax Sugar (
<script setup>) (opens new window) experimental - SFC でのステートドリブンな CSS Variables (
<style>のv-bind) (opens new window) experimental - SFC での
<style scoped>は、グローバルルールまたはスロットされたコンテンツのみを対象とするルールを含めることができるようになった (opens new window) - Suspense experimental
# 破壊的変更
INFO
Vue 2 と互換性のある動作と、互換性のない使用法に対する実行時警告を備えた Vue 3 の移行専用ビルドの開発に取り組んでいます。 重要な Vue 2 アプリの移行を計画している場合は、よりスムーズな体験のために移行ビルドを待つことを強くお勧めします。
以下は、2.x からの破壊的変更の一覧です。:
# グローバル API
# テンプレートディレクティブ
- コンポーネントでの
v-modelの使用方法が作り直され、v-bind.syncが置き換えられました <templatev-for>ノードと非v-forノードでのkeyの使用法が変更されました- 同じ要素で使用した場合の
v-ifとv-forの優先順位が変更されました v-bind="object"は順序依存(order-sensitive)になりましたv-on:event.native修飾子は削除されましたv-for内のrefは refs の配列を登録しなくなりました
# コンポーネント
- 関数コンポーネントは、単純な関数を使用してのみ作成可能になりました
- 単一ファイルコンポーネント (SFC) における
functional属性の<template>およびfunctionalコンポーネントオプションは非推奨になりました - 非同期コンポーネントは、
defineAsyncComponentメソッドを使って作成することが必要になりました - コンポーネントのイベントは、
emitsで宣言できるようになりました
# Render 関数
- Render 関数の API が変更されました
$scopedSlotsプロパティが削除され、すべてのスロットが$slotsを介して関数として公開されるようになりました$listenersは削除され、$attrsにマージされました$attrsにclassとstyle属性が追加されました
# カスタム要素
# その他の細かな変更
destroyedライフサイクルオプションの名前がunmountedに変更されましたbeforeDestroyライフサイクルオプションの名前がbeforeUnmountに変更されました- Props の
defaultファクトリ関数はthisコンテキストにアクセスできなくなりました - コンポーネントライフサイクルに合わせてカスタムディレクティブ API が変更されました
dataオプションは常に関数として宣言されることが必要になりました- ミックスインの
dataオプションは浅くマージされるようになりました - 属性強制の戦略が変更されました
- 一部のトランジションクラスの名前が変更されました
<TransitionGroup>はデフォルトでラッパー要素をレンダリングしなくなりました- 配列を監視している場合、コールバックは配列が置き換えられたときにのみ発火されるようになりました。 ミューテーションで発火する必要がある場合は、
deepオプションを指定する必要があります。 - 特別なディレクティブ(
v-if/else-if/else、v-for、またはv-slot)が使われていない<template>タグはプレーンな要素として扱われ、内部コンテンツをレンダリングする代わりにネイティブの<template>要素となります。 - マウントされたアプリケーションは、マウント先の要素を置き換えなくなりました
- ライフサイクルの
hook:イベントのプレフィックスはvnode-に変更されました
# 削除された API
v-onの修飾子としてのkeyCodeのサポート- $on, $off そして $once のインスタンスメソッド
- Filters
- インラインテンプレート属性
$childrenインスタンスプロパティpropsDataオプション$destroyインスタンスメソッド。 ユーザーは、個々の Vue コンポーネントのライフサイクルを手動で管理べきではなくなりました。- グローバル関数の
setとdelete、およびインスタンスメソッドの$setと$delete。これらはプロキシベースの変更検出では必要なくなりました。
# サポートライブラリ
現在、すべての公式ライブラリとツールが Vue 3 をサポートしていますが、中にはまだベータ版やリリース候補版のものもあります。それぞれのライブラリの詳細は以下のとおりです。ほとんどのライブラリは現在、 npm の next 配布 (dist) タグで配布されています。すべての公式ライブラリが互換性のある安定したバージョンになったら、 latest に変更する予定です。
# Vue CLI
v4.5.0 以降、 vue-cli は新しいプロジェクトを作成するときに、Vue 3 を選択するための組み込みオプションを提供するようになりました。 vue-cli をアップグレードし、 vue create を実行して、Vue3 プロジェクトを今すぐ作成できます。
# Vue Router
Vue Router 4.0 は Vue 3 のサポートを提供し、独自の破壊的変更がいくつかあります。 詳細については、移行ガイド (opens new window) を確認してください。
# Vuex
Vuex 4.0 は、3.x と大部分は同じ API で Vue3 のサポートを提供します。 唯一の破壊的変更は、プラグインのインストール方法 (opens new window)です。
# Devtools Extension
新しい UI を備え、複数の Vue のバージョンをサポートするために、内部処理にリファクタリングを施した新しいバージョンの Devtools を開発中です。 新しいバージョンは現在ベータ版であり、Vue 3 のみをサポートしています(現時点では)。 Vuex と Router の統合も進行中です。
Chrome の場合: Chrome ウェブストアからインストール (opens new window)
- 注:ベータチャネルは devtools の安定バージョンと競合する可能性があるため、ベータチャネルが正しく機能するには、安定バージョンを一時的に無効にする必要があるかもしれません。
Firefox の場合: 署名された拡張機能をダウンロード (opens new window) (Assets の下の
.xpiファイル)
# IDE のサポート
VSCode (opens new window) を公式の拡張機能である Vetur (opens new window), とともに使用することをお勧めします。それにより Vue3 の包括的な IDE のサポートを得ることができます。
# その他のプロジェクト
| Project | npm | Repo |
|---|---|---|
| @vue/babel-plugin-jsx | [GitHub (opens new window)] | |
| eslint-plugin-vue | [GitHub (opens new window)] | |
| @vue/test-utils | [GitHub (opens new window)] | |
| vue-class-component | [GitHub (opens new window)] | |
| vue-loader | [GitHub (opens new window)] | |
| rollup-plugin-vue | [GitHub (opens new window)] |
INFO
Vue 3 のライブラリとの互換性については、 awesome-vue のこの Issue (opens new window) を見てください。