diff --git a/src/.vuepress/public/images/lifecycle.png b/src/.vuepress/public/images/lifecycle.png deleted file mode 100644 index 36dd7107..00000000 Binary files a/src/.vuepress/public/images/lifecycle.png and /dev/null differ diff --git a/src/.vuepress/public/images/lifecycle.svg b/src/.vuepress/public/images/lifecycle.svg new file mode 100644 index 00000000..287e1303 --- /dev/null +++ b/src/.vuepress/public/images/lifecycle.svg @@ -0,0 +1,147 @@ + \ No newline at end of file diff --git a/src/guide/instance.md b/src/guide/instance.md index 3e1fab98..cf9d8ef2 100644 --- a/src/guide/instance.md +++ b/src/guide/instance.md @@ -1,137 +1,104 @@ -# アプリケーションインスタンス +# アプリケーションとコンポーネントのインスタンス -## インスタンスの作成 +## アプリケーションインスタンスの作成 全ての Vue アプリケーションは `createApp` 関数で新しい **アプリケーションインスタンス (application instance)** を作成するところから始まります: ```js -Vue.createApp(/* options */) +const app = Vue.createApp({ + /* options */ +}) ``` -インスタンスが作成されたあと、コンテナを `mount` メソッドに渡すことで、これを _マウント_ できます。例えば、Vue アプリケーションを `
` にマウントしたいときは、`#app` を渡します: +アプリケーションインスタンスは、そのアプリケーション内のコンポーネントが使えるグローバル(コンポーネント、ディレクティブ、プラグインなど)を登録するために使われます。詳しいことはガイドの後半で説明しますが、簡単な例をあげると: ```js -Vue.createApp(/* options */).mount('#app') -``` - -[MVVM パターン](https://ja.wikipedia.org/wiki/Model_View_ViewModel)に厳密に関連づけられているわけではないにもかかわらず、Vue の設計は部分的にその影響を受けています。慣例的に、私たちはインスタンスを参照するのに変数 `vm`(ViewModel の短縮形)を使用します。 - -インスタンスを作成する際には、 **オプションオブジェクト (options object)** を渡すことができます。このガイドの多くは、意図した挙動を作るためにこれらのオプションをどのように使うことができるかを解説します。全てのオプションのリストは [API リファレンス](../api/options-data.html)で読むこともできます。 - -Vue アプリケーションは、`createApp` で作られたひとつの **ルートインスタンス (root instance)** と、入れ子になった再利用可能なコンポーネントのツリーから成ります。例えば、`todo` アプリケーションのコンポーネントツリーはこのようになるでしょう: - -``` -Root Instance -└─ TodoList - ├─ TodoItem - │ ├─ DeleteTodoButton - │ └─ EditTodoButton - └─ TodoListFooter - ├─ ClearTodosButton - └─ TodoListStatistics +const app = Vue.createApp({}) +app.component('SearchInput', SearchInputComponent) +app.directive('focus', FocusDirective) +app.use(LocalePlugin) ``` -[コンポーネントシステム](component-basics.html)の詳細は後ほど扱います。いまは、全てのVue コンポーネントもまたインスタンスであり、同じようなオプションオブジェクトを受け入れることだけを知っておいてください。 - -## データとメソッド - -インスタンスは作成時に、`data` で見つけられる全てのプロパティを [Vue の **リアクティブシステム (reactive system)**](reactivity.html)に追加します。これらのプロパティの値が変わると、ビューは"反応 (react)"し、新しい値に追従します。 +アプリケーションインスタンスが公開するほとんどのメソッドは、同じインスタンスを返すので、チェーンすることができます: ```js -// データオブジェクト -const data = { a: 1 } - -// オブジェクトがルートインスタンスに追加されます -const vm = Vue.createApp({ - data() { - return data - } -}).mount('#app') - -// インスタンス上のプロパティを取得すると、元のデータのプロパティが返されます -vm.a === data.a // => true - -// インスタンス上のプロパティへの代入は、元のデータにも影響されます -vm.a = 2 -data.a // => 2 +Vue.createApp({}) + .component('SearchInput', SearchInputComponent) + .directive('focus', FocusDirective) + .use(LocalePlugin) ``` -このデータが変更されると、ビューが再レンダリングされます。`data` のプロパティは、インスタンスが作成時に存在した場合にのみ **リアクティブ (reactive)** です。次のように新しいプロパティを代入すると: +すべてのアプリケーション API は [API リファレンス](../api/application-api.html) で閲覧できます。 -```js -vm.b = 'hi' -``` +## ルートコンポーネント + +`createApp` に渡されたオプションは、**ルートコンポーネント** の設定に使われます。このコンポーネントは、アプリケーションを **マウント** する際に、レンダリングの起点として使われます。 -`b` への変更はビューへの更新を引き起こしません。あるプロパティがのちに必要であることがわかっているが、最初は空または存在しない場合は、なんらかの初期値を設定する必要があります。例: +アプリケーションは DOM 要素にマウントする必要があります。例えば、 Vue アプリケーションを `` にマウントしたい場合、 `#app` を渡す必要があります: ```js -data() { - return { - newTodoText: '', - visitCount: 0, - hideCompletedTodos: false, - todos: [], - error: null - } +const RootComponent = { + /* オプション */ } +const app = Vue.createApp(RootComponent) +const vm = app.mount('#app') ``` -これに対する唯一の例外は `Object.freeze()` を使用し既存のプロパティが変更されるのを防ぐことです。これはリアクティブシステムが変更を _追跡 (track)_ することができないことも意味します。 +ほとんどのアプリケーションメソッドとは異なり、 `mount` はアプリケーションを返しません。代わりにルートコンポーネントのインスタンスを返します。 -```js -const obj = { - foo: 'bar' -} +厳密には [MVVM パターン](https://en.wikipedia.org/wiki/Model_View_ViewModel) とは関係ないですが、 Vue の設計はその影響を受けています。慣習として、コンポーネントのインスタンスを参照するのに `vm` (ViewModel の略) という変数を使うことがよくあります。 -Object.freeze(obj) +このページのすべての例では1つのコンポーネントしか必要としていませんが、実際の多くのアプリケーションでは再利用可能なコンポーネントを入れ子にしたツリー状に構成されています。例えば、 Todo アプリケーションのコンポーネントツリーは次のようになります: -const vm = Vue.createApp({ - data() { - return obj - } -}).mount('#app') ``` - -```html -{{ foo }}
- - -