diff --git a/src/.vuepress/config.js b/src/.vuepress/config.js index 1267a37c..d5c5181b 100644 --- a/src/.vuepress/config.js +++ b/src/.vuepress/config.js @@ -19,7 +19,7 @@ const sidebar = { '/guide/introduction', '/guide/instance', '/guide/template-syntax', - // '/guide/data-methods', + '/guide/data-methods', '/guide/computed', '/guide/class-and-style', '/guide/conditional', diff --git a/src/guide/data-methods.md b/src/guide/data-methods.md new file mode 100644 index 00000000..b7f97f80 --- /dev/null +++ b/src/guide/data-methods.md @@ -0,0 +1,125 @@ +# データプロパティとメソッド + +## データプロパティ + +コンポーネントの `data` オプションは関数です。Vue は新しいコンポーネントのインスタンスを作成する際に、この関数を呼び出します。これはオブジェクトを返すもので、 Vue はオブジェクトをそのリアクティブシステムでラップして、コンポーネントのインスタンスに `$data` として格納します。便宜上、そのオブジェクトのトップレベルのプロパティは、コンポーネントのインスタンスを介して直接公開されます: + +```js +const app = Vue.createApp({ + data() { + return { count: 4 } + } +}) + +const vm = app.mount('#app') + +console.log(vm.$data.count) // => 4 +console.log(vm.count) // => 4 + +// vm.count に値を代入すると、 $data.count も更新 +vm.count = 5 +console.log(vm.$data.count) // => 5 + +// ... 逆もまた同様 +vm.$data.count = 6 +console.log(vm.count) // => 6 +``` + +これらのインスタンスプロパティは、インスタンスの初回作成時にのみ追加されます。そのため、 `data` 関数から返されたオブジェクトに、それらがすべて含まれていることを確認する必要があります。必要に応じて、必要な値がまだ利用できないプロパティには、 `null` や `undefined` 、またはその他のプレースホルダーの値を使ってください。 + +新しいプロパティを `data` に含めずに、コンポーネントのインスタンスに直接追加することはできます。しかし、このプロパティはリアクティブな `$data` オブジェクトによって支えられていないので、 [Vue のリアクティブシステム](reactivity.html) によって、自動的に追跡されることはありません。 + +Vue は、コンポーネントのインスタンスを介して自身のビルトイン API を公開する際に、 `$` をプレフィックスとして使います。 また、内部プロパティのために `_` を予約しています。トップレベルの `data` プロパティの名前に、これらの文字からはじまる名前を使うことは避けるべきです。 + +## メソッド + +コンポーネントのインスタンスにメソッドを追加するには、 `methods` オプションを使います。これは必要なメソッドを含むオブジェクトでなければなりません: + +```js +const app = Vue.createApp({ + data() { + return { count: 4 } + }, + methods: { + increment() { + // `this` はコンポーネントインスタンスを参照 + this.count++ + } + } +}) + +const vm = app.mount('#app') + +console.log(vm.count) // => 4 + +vm.increment() + +console.log(vm.count) // => 5 +``` + +Vue は、 `methods` の `this` を自動的に束縛して、常にコンポーネントのインスタンスを参照します。これにより、メソッドがイベントリスナやコールバックとして使われる際に、正しい `this` の値を保持することができます。Vue が適切な `this` の値を束縛するのを防ぐため、 `methods` を定義する際にはアロー関数を使うのは避けるべきです。 + +コンポーネントのインスタンスの他のすべてのプロパティと同様に、 `methods` はコンポーネントのテンプレート内からアクセスできます。テンプレート内からはよくイベントリスナとして使われます: + +```html + +``` + +上の例では、 ` + ` +}) +```