Skip to content

Commit 1587c49

Browse files
authored
Guide > Component Basics の翻訳を追従 (#281)
* Update component-basics.md vuejs/docs@8ee82a9#diff-5fceb06c7c1b83dc62c300ff985d1949e672a74967b4c092b60185319e12d7fd * fix: add an emits option to examples that emit events vuejs/docs@e554cd6#diff-5fceb06c7c1b83dc62c300ff985d1949e672a74967b4c092b60185319e12d7fd * Revise component-basics.md vuejs/docs@0eebf0e#diff-5fceb06c7c1b83dc62c300ff985d1949e672a74967b4c092b60185319e12d7fd * fix: add a sentence that forgot to translate
1 parent 123b8d4 commit 1587c49

File tree

1 file changed

+27
-27
lines changed

1 file changed

+27
-27
lines changed

src/guide/component-basics.md

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ app.mount('#components-demo')
4040

4141
<common-codepen-snippet title="Component basics" slug="abORVEJ" tab="js,result" :preview="false" />
4242

43-
コンポーネントは再利用可能なインスタンスなので、`data``computed``watch``methods`、そしてライフサイクルフックのようなルートインスタンスと同様のオプションが利用可能です。唯一の例外は `el` のようなルート固有のオプションです。
43+
コンポーネントは再利用可能なインスタンスなので、`data``computed``watch``methods`、そしてライフサイクルフックのようなルートインスタンスと同様のオプションが利用可能です。
4444

4545
## コンポーネントの再利用
4646

@@ -66,7 +66,7 @@ app.mount('#components-demo')
6666

6767
例えば、 ヘッダー、サイドバー、コンテンツエリアなどのコンポーネントがあり、それぞれには一般的にナビゲーションリンクやブログ投稿などのコンポーネントが含まれています。
6868

69-
これらのコンポーネントをテンプレートで使用するためには、 Vue がそれらを認識できるように登録する必要があります。 コンポーネントの登録には**グローバル****ローカル**の 2 種類があります。これまでは、アプリケーションの `component` メソッドを利用してグローバルに登録してきただけです:
69+
これらのコンポーネントをテンプレートで使用するためには、 Vue がそれらを認識できるように登録する必要があります。コンポーネントの登録には**グローバル****ローカル**の 2 種類があります。これまでは、アプリケーションの `component` メソッドを利用してグローバルに登録してきただけです:
7070

7171
```js
7272
const app = Vue.createApp({})
@@ -76,15 +76,15 @@ app.component('my-component-name', {
7676
})
7777
```
7878

79-
グローバルに登録されたコンポーネントはその後作成された `app` インスタンスのテンプレートで使用することができます。さらに、ルートインスタンスのコンポーネントツリーの全てのサブコンポーネント内でも使用することが出来ます
79+
グローバルに登録されたコンポーネントは、アプリケーション内のどのコンポーネントのテンプレートでも使うことができます
8080

8181
とりあえずコンポーネント登録についてはこれで以上ですが、このページを読み終えて十分に理解できたら、後から戻ってきて[コンポーネント登録](component-registration.md)の完全なガイドを読むことをお勧めします。
8282

8383
## プロパティを用いた子コンポーネントへのデータの受け渡し
8484

85-
先ほど、 ブログ投稿用のコンポーネントの作成について触れました。問題は、 表示する特定の投稿のタイトルや内容のようなデータを作成したコンポーネントに渡せなければそのコンポーネントは役に立たないということです。プロパティはここで役立ちます。
85+
先ほど、ブログ投稿用のコンポーネントの作成について触れました。問題は、表示する特定の投稿のタイトルや内容のようなデータを作成したコンポーネントに渡せなければそのコンポーネントは役に立たないということです。プロパティはここで役立ちます。
8686

87-
プロパティはコンポーネントに登録できるカスタム属性です。値がプロパティ属性に渡されると、そのコンポーネントインスタンスのプロパティになります。先ほどのブログ投稿用のコンポーネントにタイトルを渡すためには、`props`オプションを用いてこのコンポーネントが受け取るプロパティのリストの中に含めることができます:
87+
プロパティはコンポーネントに登録できるカスタム属性です。値がプロパティ属性に渡されると、そのコンポーネントインスタンスのプロパティになります。先ほどのブログ投稿用のコンポーネントにタイトルを渡すためには、`props` オプションを用いてこのコンポーネントが受け取るプロパティのリストの中に含めることができます:
8888

8989
```js
9090
const app = Vue.createApp({})
@@ -97,9 +97,11 @@ app.component('blog-post', {
9797
app.mount('#blog-post-demo')
9898
```
9999

100-
コンポーネントは必要に応じて多くのプロパティを持つことができ、デフォルトでは任意のプロパティに任意の値を渡すことができます。上記のテンプレートでは、`data` と同様に、コンポーネントインスタンスでこの値にアクセスできることが分かります
100+
プロパティ属性に値が渡されると、渡されたそのコンポーネントインスタンスのプロパティになります。そのプロパティの値は、他のコンポーネントのプロパティと同じように、テンプレート内でアクセスができます
101101

102-
プロパティが登録されたら、 次のようにカスタム属性としてデータをプロパティに渡すことができます:
102+
コンポーネントは必要に応じて多くのプロパティを持つことができ、デフォルトでは任意のプロパティに任意の値を渡すことができます。
103+
104+
プロパティが登録されたら、次のようにカスタム属性としてデータをプロパティに渡すことができます:
103105

104106
```html
105107
<div id="blog-post-demo" class="demo">
@@ -154,7 +156,7 @@ app.mount('#blog-posts-demo')
154156

155157
## 子コンポーネントのイベントを購読する
156158

157-
`<blog-post>` コンポーネントを開発する中で、いくつかの機能で親コンポーネントとの通信が必要になるかもしれません。例えば、残りの部分の大きさはそのままで、ブログ記事の文字の文字を拡大するアクセシビリティ機能を実装することを決めるかもしれません
159+
`<blog-post>` コンポーネントを開発する中で、いくつかの機能で親コンポーネントとの通信が必要になるかもしれません。例えば、ページの他の部分の大きさはそのままで、ブログ記事のテキストを拡大するアクセシビリティ機能を実装することを決めるかもしれません
158160

159161
親コンポーネントでは、`postFontSize` データプロパティを追加することでこの機能をサポートすることができます:
160162

@@ -171,7 +173,7 @@ const App = {
171173
}
172174
```
173175

174-
すべてのブログ投稿のフォントサイズを制御するためにテンプレート内で使用できます:
176+
これはすべてのブログ投稿のフォントサイズを制御するためにテンプレート内で使用できます:
175177

176178
```html
177179
<div id="blog-posts-events-demo">
@@ -209,25 +211,25 @@ app.component('blog-post', {
209211
</button>
210212
```
211213

212-
ボタンをクリックすると、全ての投稿のテキストを拡大する必要があることを親に伝える必要があります。親は、ネイティブ DOM イベントでの場合と同様に、 `v-on``@` を用いて子コンポーネントのインスタンスでのイベントを購読することができます:
214+
ボタンをクリックすると、全ての投稿のテキストを拡大する必要があることを親に伝える必要があります。この問題を解決するために、コンポーネントインスタンスはカスタムイベントの仕組みを提供しています。親は、ネイティブ DOM イベントでの場合と同様に、 `v-on``@` を用いて子コンポーネントのインスタンスでのイベントを購読することができます:
213215

214216
```html
215217
<blog-post ... @enlarge-text="postFontSize += 0.1"></blog-post>
216218
```
217219

218-
そして子コンポーネントはビルトインの [**`$emit`** メソッド](../api/instance-methods.html#emit)にイベントの名前を渡して呼び出すことで、イベントを送出することができます:
220+
そして子コンポーネントはビルトインの [**`$emit`** メソッド](../api/instance-methods.html#emit)にイベントの名前を渡して呼び出すことで、イベントを発行することができます:
219221

220222
```html
221223
<button @click="$emit('enlargeText')">
222224
Enlarge text
223225
</button>
224226
```
225227

226-
親コンポーネントは `v-on:enlarge-text="postFontSize += 0.1"` リスナーによって、このイベントを受け取り `postFontSize` を更新することができます
228+
`@enlarge-text="postFontSize += 0.1"` リスナによって、親コンポーネントはこのイベントを受け取り `postFontSize` の値を更新することができます
227229

228230
<common-codepen-snippet title="Component basics: emitting events" slug="KKpGyrp" tab="html,result" :preview="false" />
229231

230-
コンポーネントの `emits` オプションにより排出されたイベントをリストアップすることができます。
232+
コンポーネントの `emits` オプションにより発行されたイベントを一覧することができます:
231233

232234
```js
233235
app.component('blog-post', {
@@ -238,9 +240,9 @@ app.component('blog-post', {
238240

239241
これにより、コンポーネントが排出する全てのイベントをチェックし、オプションでそれらを[検証する](component-custom-events.html#validate-emitted-events)ことができます。
240242

241-
### イベントと値を送出する
243+
### イベントと値を発行する
242244

243-
イベントを特定の値と一緒に送出すると便利な場合があります。例えば、テキストをどれだけ大きく表示するかを `<blog-post>` コンポーネントの責務とさせたいかもしれません。そのような場合、 `$emit` の第二引数を使ってこの値を渡すことができます:
245+
イベントを特定の値と一緒に発行すると便利な場合があります。例えば、テキストをどれだけ大きく表示するかを `<blog-post>` コンポーネントの責務とさせたいかもしれません。そのような場合、 `$emit` の第二引数を使ってこの値を渡すことができます:
244246

245247
```html
246248
<button @click="$emit('enlargeText', 0.1)">
@@ -300,13 +302,14 @@ methods: {
300302
これが実際に機能するためには、テンプレート内の `<input>` は以下でなければなりません:
301303

302304
- `value` 属性を `modelValue` プロパティにバインドする
303-
- `input` では、 `update:modelValue` イベントを新しい値と共に送出する
305+
- `input` では、 `update:modelValue` イベントを新しい値と共に発行する
304306

305307
以下のようになります:
306308

307309
```js
308310
app.component('custom-input', {
309311
props: ['modelValue'],
312+
emits: ['update:modelValue'],
310313
template: `
311314
<input
312315
:value="modelValue"
@@ -322,15 +325,12 @@ app.component('custom-input', {
322325
<custom-input v-model="searchText"></custom-input>
323326
```
324327

325-
カスタムコンポーネント内で `v-model` を使うもう一つの方法は `computed` プロパティを利用してゲッターとセッターを定義することです。
326-
327-
以下の例では、computed プロパティを用いて `custom-input` コンポーネントをリファクタリングします。
328-
329-
注意して欲しいのは、 `get` メソッドは `modelValue` 属性を返し、バインディングに使用しているプロパティがどれであるかに関わらず、 `set` メソッドはそのプロパティに対応する `$emit` を送出しなければならないということです。
328+
このコンポーネント内で `v-model` を実装するもう一つの方法は `computed` プロパティの機能を使ってゲッターとセッターを定義することです。 `get` メソッドは `modelValue` プロパティを返して、 `set` メソッドは対応するイベントを発行する必要があります。
330329

331330
```js
332331
app.component('custom-input', {
333332
props: ['modelValue'],
333+
emits: ['update:modelValue'],
334334
template: `
335335
<input v-model="value">
336336
`,
@@ -363,7 +363,7 @@ HTML 要素のように、コンポーネントに要素を渡すことができ
363363

364364
<common-codepen-snippet title="Component basics: slots" slug="jOPeaob" :preview="false" />
365365

366-
幸いにも、この作業は Vue のカスタム `<slot>` 要素により非常に簡単になります:
366+
これは、 Vue のカスタム `<slot>` 要素で達成できます:
367367

368368
```js
369369
app.component('alert-box', {
@@ -376,7 +376,7 @@ app.component('alert-box', {
376376
})
377377
```
378378

379-
上で見た通り、ただ渡したいところにスロットを追加するだけです。それだけです。終わりです!
379+
上で見た通り、コンテンツを配置したいところにプレースホルダとして `<slot>` を使います。それだけです。終わりです!
380380

381381
とりあえずスロットについてはこれで以上ですが、このページを読み終えて十分に理解できたら、後から戻ってきて[スロット](component-slots.md)の完全なガイドを読むことをお勧めします。
382382

@@ -386,7 +386,7 @@ app.component('alert-box', {
386386

387387
<common-codepen-snippet title="Component basics: dynamic components" slug="oNXaoKy" :preview="false" />
388388

389-
上記は Vue の `<component>` 属性に特別な属性である `is` を持たせることで実現しています:
389+
上記は Vue の `<component>` 要素に特別な `is` 属性を持たせることで実現しています:
390390

391391
```html
392392
<!-- コンポーネントは currentTabComponent に変更があったときに変更されます -->
@@ -400,7 +400,7 @@ app.component('alert-box', {
400400

401401
完全なコードを試すには [この例](https://codepen.io/team/Vue/pen/oNXaoKy)、登録された名前ではなくコンポーネントのオプションオブジェクトをバインドしている例は[こちらのバージョン](https://codepen.io/team/Vue/pen/oNXapXM)を参照してください。
402402

403-
この属性は通常の HTML 要素で使用することができますが、それらはコンポーネントとして扱われ、すべての属性は **DOM 属性としてバインドされる**ことを覚えておいてください。 `value` のようないくつかのプロパティが期待通りに動作するためには、 [`.prop` 修飾子](../api/directives.html#v-bind)を用いてバインドする必要があります
403+
また、 `is` 属性を使って通常の HTML 要素を作ることもできます
404404

405405
とりあえず動的なコンポーネントについてはこれで以上ですが、このページを読み終えて十分に理解できたら、後から戻ってきて[動的 & 非同期コンポーネント](./component-dynamic-async.html)の完全なガイドを読むことをお勧めします。
406406

@@ -416,7 +416,7 @@ app.component('alert-box', {
416416
</table>
417417
```
418418

419-
このカスタムコンポート `<blog-post-row>` は無効なコンテンツとして摘み出され、最終的に描画された内容にエラーが発生します。幸い、これを回避するために `v-is` という特殊なディレクティブを使用することができます:
419+
このカスタムコンポーネント `<blog-post-row>` は無効なコンテンツとして巻き取られ、最終的にレンダリングされた出力でエラーが発生します。回避策として特別な `v-is` ディレクティブを使うことができます:
420420

421421
```html
422422
<table>
@@ -425,7 +425,7 @@ app.component('alert-box', {
425425
```
426426

427427
:::warning
428-
`v-is` の値は JavaScript の文字列リテラルである必要があります:
428+
`v-is` の値は JavaScript の式として扱われるので、コンポーネント名を引用符で囲む必要があります:
429429

430430
```html
431431
<!-- 間違い、何も出力されません-->

0 commit comments

Comments
 (0)