1
1
# はじめに
2
2
3
- ## なぜコンポジション API なのか?
3
+ ## なぜ Composition API なのか?
4
4
5
5
::: tip Note
6
6
ドキュメントでここまで到達しているならば、[ Vue の基本] ( introduction.md ) と[ コンポーネントの作成] ( component-basics.md ) の両方にすでに精通しているはずです。
@@ -18,7 +18,10 @@ Vue コンポーネントを作成するとその機能と結合されたイン
18
18
export default {
19
19
components: { RepositoriesFilters, RepositoriesSortBy, RepositoriesList },
20
20
props: {
21
- user: { type: String }
21
+ user: {
22
+ type: String ,
23
+ required: true
24
+ }
22
25
},
23
26
data () {
24
27
return {
@@ -54,29 +57,29 @@ export default {
54
57
55
58
コンポーネントのオプション (` data ` , ` computed ` , ` methods ` , ` watch ` ) でまとめたロジックはたいていの場合は正しく動作します。しかし、コンポーネントがより大きくなれば、** 論理的な関心事** のリストもまた大きくなります。これは、特に最初からコンポーネントを書いていない人々にとって、コンポーネントを読みづらく、理解しづらいものにするかもしれません。
56
59
57
- ![ Vue オプション API: オプションの種類によってグループ分けされたコード] ( https://user- images.githubusercontent.com/499550/62783021-7ce24400-ba89-11e9-9dd3-36f4f6b1fae2 .png)
60
+ ![ Vue オプション API: オプションの種類によってグループ分けされたコード] ( / images/options-api .png)
58
61
59
62
** 論理的な関心事** が色でグループ化されている大きなコンポーネントを示す例。
60
63
61
64
このような分離は、複雑なコンポーネントを理解してメンテナンスすることを難しくします。このオプションの分離は背景にある論理的な関心事をわかりづらくします。さらに、単一の論理的な関心事に取り組む場合、関連するコードのオプションブロックを何度も "ジャンプ" する必要があります。
62
65
63
- 同じ論理的な関心事に関連するコードを並べることができれば、より良くなるでしょう。そして、これはまさにコンポジション API が可能にします。
66
+ 同じ論理的な関心事に関連するコードを並べることができれば、より良くなるでしょう。そして、これはまさに Composition API が可能にします。
64
67
65
- ## コンポジション API の基本
68
+ ## Composition API の基本
66
69
67
- これで** なぜこの方法** にたどり着くのかわかりました。コンポジション API の使用を開始するには、初めに実際に使用できる場所が必要です。Vue コンポーネントでは、この場所を ` setup ` と呼びます。
70
+ これで** なぜこの方法** にたどり着くのかわかりました。 Composition API の使用を開始するには、初めに実際に使用できる場所が必要です。Vue コンポーネントでは、この場所を ` setup ` と呼びます。
68
71
69
72
### ` setup ` コンポーネントオプション
70
73
71
74
<VideoLesson href =" https://www.vuemastery.com/courses/vue-3-essentials/setup-and-reactive-references " title =" Vue Mastery で setup がどのように動作するのか学ぶ " >Vue Mastery で setup に関する無料ビデオを視聴する</VideoLesson >
72
75
73
- 新しい ` setup ` コンポーネントオプションは、コンポーネントが作成される前に ` props ` が解決されると実行され、コンポジション API のエントリポイントとして機能します。
76
+ 新しい ` setup ` コンポーネントオプションは、コンポーネントが作成される前に ` props ` が解決されると実行され、 Composition API のエントリポイントとして機能します。
74
77
75
78
::: warning
76
79
` setup ` が実行されたときは、まだコンポーネントのインスタンスが作られないため、` setup ` オプションの中では ` this ` を使用できません。これは ` props ` を除いて、コンポーネント内で宣言されているあらゆるプロパティ (** ローカルの state** や ** computed プロパティ** 、** methods** ) にアクセスできないことを意味します。
77
80
:::
78
81
79
- ` setup ` オプションは ` props ` と[ 後で] ( composition-api-setup.html#arguments ) 紹介する ` context ` を受け付ける関数であるべきです。さらに、` setup ` から返される全てのものは、コンポーネントの残りの要素 (computed プロパティ、methods、ライフサイクルフックなど) およびコンポーネントの template に公開されます。
82
+ ` setup ` オプションは ` props ` と[ 後で] ( composition-api-setup.html#引数 ) 紹介する ` context ` を受け付ける関数であるべきです。さらに、` setup ` から返される全てのものは、コンポーネントの残りの要素 (computed プロパティ、methods、ライフサイクルフックなど) およびコンポーネントの template に公開されます。
80
83
81
84
` setup ` をコンポーネントに追加しましょう:
82
85
@@ -86,7 +89,10 @@ export default {
86
89
export default {
87
90
components: { RepositoriesFilters, RepositoriesSortBy, RepositoriesList },
88
91
props: {
89
- user: { type: String }
92
+ user: {
93
+ type: String ,
94
+ required: true
95
+ }
90
96
},
91
97
setup (props ) {
92
98
console .log (props) // { user: '' }
@@ -155,10 +161,10 @@ console.log(counter.value) // 1
155
161
156
162
![ 参照渡し vs 値渡し] ( https://blog.penjee.com/wp-content/uploads/2015/02/pass-by-reference-vs-pass-by-value-animation.gif )
157
163
158
- 任意の値の周りにラッパーオブジェクトがあると 、途中でリアクティブでなくなることがなく、アプリ全体に安全に渡すことができます。
164
+ どんな値でもラッパーオブジェクトを持つことで 、途中でリアクティブでなくなることがなく、アプリ全体に安全に渡すことができます。
159
165
160
166
::: tip Note
161
- 言い換えれば、` ref ` は値への** リアクティブな参照** を作成します。 ** 参照** を操作するという概念はコンポジション API 全体で頻繁に使用されます。
167
+ 言い換えれば、` ref ` は値への** リアクティブな参照** を作成します。 ** 参照** を操作するという概念は Composition API 全体で頻繁に使用されます。
162
168
:::
163
169
164
170
例に戻って、リアクティブな ` repositories ` 変数を作成しましょう:
@@ -192,7 +198,10 @@ import { ref } from 'vue'
192
198
export default {
193
199
components: { RepositoriesFilters, RepositoriesSortBy, RepositoriesList },
194
200
props: {
195
- user: { type: String }
201
+ user: {
202
+ type: String ,
203
+ required: true
204
+ }
196
205
},
197
206
setup (props ) {
198
207
const repositories = ref ([])
@@ -233,7 +242,7 @@ export default {
233
242
234
243
### ライフサイクルフックを ` setup ` の中に登録する
235
244
236
- オプション API に比べてコンポジション API の機能を完全にするには、ライフサイクルフックを ` setup ` の中に登録する必要があります。これは Vue から提供されるいくつかの新しい関数のおかげで可能になりました。コンポジション API におけるライフサイクルフックはオプション API と同様の名称ですが、` on ` というプレフィックスが付いています。例: ` mounted ` は ` onMounted ` のようになっています。
245
+ オプション API に比べて Composition API の機能を完全にするには、ライフサイクルフックを ` setup ` の中に登録する必要があります。これは Vue から提供されるいくつかの新しい関数のおかげで可能になりました。 Composition API におけるライフサイクルフックはオプション API と同様の名称ですが、` on ` というプレフィックスが付いています。例: ` mounted ` は ` onMounted ` のようになっています。
237
246
238
247
それらの関数はコンポーネントによってフックが呼び出されるときに実行されるコールバックを受け付けます。
239
248
@@ -300,7 +309,7 @@ export default {
300
309
}
301
310
```
302
311
303
- ` watch ` についての詳細は、[ 詳細ガイド] ( ) を参照してください。
312
+ ` watch ` についての詳細は、[ 詳細ガイド] ( reactivity-computed-watchers.md#watch ) を参照してください。
304
313
305
314
** 例に適用しましょう:**
306
315
@@ -392,7 +401,7 @@ setup (props) {
392
401
}
393
402
```
394
403
395
- 他の** 論理的な関心事** にも同じことができますが、既に疑問があるかもしれません。- _ これはコードを ` setup ` オプションに移動させて肥大させるだけではありませんか?_ そのため他の責務に移る前に、まず上記のコードをスタンドアロンな** コンポジション関数 ** に抽出します。 ` useUserRepositories ` の作成から始めましょう:
404
+ 他の** 論理的な関心事** にも同じことができますが、既に疑問があるかもしれません。- _ これはコードを ` setup ` オプションに移動させて肥大させるだけではありませんか?_ そのため他の責務に移る前に、まず上記のコードをスタンドアロンな** Composition 関数 ** に抽出します。 ` useUserRepositories ` の作成から始めましょう:
396
405
397
406
``` js
398
407
// src/composables/useUserRepositories.js
@@ -416,7 +425,7 @@ export default function useUserRepositories(user) {
416
425
}
417
426
```
418
427
419
- And then the searching functionality :
428
+ それから検索機能も :
420
429
421
430
``` js
422
431
// src/composables/useRepositoryNameSearch.js
@@ -449,7 +458,10 @@ import { toRefs } from 'vue'
449
458
export default {
450
459
components: { RepositoriesFilters, RepositoriesSortBy, RepositoriesList },
451
460
props: {
452
- user: { type: String }
461
+ user: {
462
+ type: String ,
463
+ required: true
464
+ }
453
465
},
454
466
setup (props ) {
455
467
const { user } = toRefs (props)
@@ -495,7 +507,10 @@ import useRepositoryFilters from '@/composables/useRepositoryFilters'
495
507
export default {
496
508
components: { RepositoriesFilters, RepositoriesSortBy, RepositoriesList },
497
509
props: {
498
- user: { type: String }
510
+ user: {
511
+ type: String ,
512
+ required: true
513
+ }
499
514
},
500
515
setup (props ) {
501
516
const { user } = toRefs (props)
@@ -528,4 +543,4 @@ export default {
528
543
529
544
これで完了です!
530
545
531
- コンポジション API の表面とできることについてほんの少し触れただけであることを覚えておいてください。より詳しく知りたい場合は、詳細ガイドを参照してください。
546
+ Composition API の表面とできることについてほんの少し触れただけであることを覚えておいてください。より詳しく知りたい場合は、詳細ガイドを参照してください。
0 commit comments