Skip to content

Commit cd444b6

Browse files
authored
Merge pull request #143 from ryoAccount/key_attribute_lang_ja
Migration Guide > key attribute の翻訳
2 parents 93a3a0e + d05ecfd commit cd444b6

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

src/guide/migration/key-attribute.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
---
2+
badges:
3+
- breaking
4+
---
5+
6+
# `key` 属性 <MigrationBadges :badges="$frontmatter.badges" />
7+
8+
## 概要
9+
10+
- **新着:** Vue が一意の `key` を自動的に生成するようになったため、`v-if`/`v-else`/`v-else-if` 分岐で `key` が不要になりました。
11+
- **破壊的変更:** 手動で `key` を指定する場合、各分岐は一意の `key` を使用する必要があります。 同じ `key` を意図的に使用して分岐を強制的に再利用することはできなくなりました。
12+
- **破壊的変更:** `<template v-for>` における `key` は、`<template>` タグに配置する必要があります(子の要素ではない)
13+
14+
## 背景
15+
16+
特別な属性である `key` はノードの ID を追跡するために Vue の仮想 DOM のアルゴリズムのヒントとして使用されます。 こうすることで Vue は既存のノードを再利用してパッチを適用できる時期と、ノードを並べ替えまたは再作成する必要がある時期を識別します。 詳細については、次のセクションを参照してください。
17+
18+
- [リストレンダリング: 状態の維持](/guide/list.html#maintaining-state)
19+
- [API リファレンス: 特別な属性 `key` ](/api/special-attributes.html#key)
20+
21+
## 条件分岐について
22+
23+
Vue 2.x では、`v-if` / `v-else` / `v-else-if` 分岐で `key` を使用することが推奨されていました。
24+
25+
```html
26+
<!-- Vue 2.x -->
27+
<div v-if="condition" key="yes">Yes</div>
28+
<div v-else key="no">No</div>
29+
```
30+
31+
上記の例は、Vue3.x でも機能します。 ただし、`v-if` / `v-else` / `v-else-if` 分岐で `key` 属性を使用することはおすすめしません。条件分岐で `key` を指定しない場合、一意となる `key` が自動的に生成されるようになったためです。
32+
33+
```html
34+
<!-- Vue 3.x -->
35+
<div v-if="condition">Yes</div>
36+
<div v-else>No</div>
37+
```
38+
39+
破壊的変更は、手動で `key` を指定する場合、各分岐に一意となる `key` を使用する必要があることです。ほとんどの場合、これらの `key` は削除できます。
40+
41+
```html
42+
<!-- Vue 2.x -->
43+
<div v-if="condition" key="a">Yes</div>
44+
<div v-else key="a">No</div>
45+
46+
<!-- Vue 3.x (推奨される解決策:key を削除する) -->
47+
<div v-if="condition">Yes</div>
48+
<div v-else>No</div>
49+
50+
<!-- Vue 3.x (別の解決策:key が常に一意であることを確認してください) -->
51+
<div v-if="condition" key="a">Yes</div>
52+
<div v-else key="b">No</div>
53+
```
54+
55+
## `<template v-for>` の使用
56+
57+
Vue 2.x では、`<template>` タグに `key` を含めることができませんでした。 代わりに、それぞれの子要素に `key` を配置できます。
58+
59+
```html
60+
<!-- Vue 2.x -->
61+
<template v-for="item in list">
62+
<div :key="item.id">...</div>
63+
<span :key="item.id">...</span>
64+
</template>
65+
```
66+
67+
Vue 3.x では、`key``<template>` タグに配置する必要があります。
68+
69+
```html
70+
<!-- Vue 3.x -->
71+
<template v-for="item in list" :key="item.id">
72+
<div>...</div>
73+
<span>...</span>
74+
</template>
75+
```
76+
77+
同様に、子要素が `v-if` を使用する `<template v-for>` を使用する場合、`key``<template>` タグに移動する必要があります。
78+
79+
```html
80+
<!-- Vue 2.x -->
81+
<template v-for="item in list">
82+
<div v-if="item.isVisible" :key="item.id">...</div>
83+
<span v-else :key="item.id">...</span>
84+
</template>
85+
86+
<!-- Vue 3.x -->
87+
<template v-for="item in list" :key="item.id">
88+
<div v-if="item.isVisible">...</div>
89+
<span v-else>...</span>
90+
</template>
91+
```

0 commit comments

Comments
 (0)