@@ -12,7 +12,31 @@ Vue の宣言型レンダリングモデルは、直接的な DOM 操作のほ
1212
1313<div class =" composition-api " >
1414
15- Composition API で参照を取得するには、以下のようにテンプレートの ref 属性の値と一致する名前の ref を宣言します:
15+ Composition API で参照を取得するには、[ ` useTemplateRef() ` ] ( /api/composition-api-helpers#usetemplateref ) ヘルパー <sup class =" vt-badge " data-text =" 3.5+ " /> を使用できます:
16+
17+ ``` vue
18+ <script setup>
19+ import { useTemplateRef, onMounted } from 'vue'
20+
21+ // 最初の引数は、テンプレートの ref の値に一致させる必要があります。
22+ const input = useTemplateRef('my-input')
23+
24+ onMounted(() => {
25+ input.value.focus()
26+ })
27+ </script>
28+
29+ <template>
30+ <input ref="my-input" />
31+ </template>
32+ ```
33+
34+ TypeScript を使用する場合、Vue の IDE サポートと ` vue-tsc ` は、一致する ` ref ` 属性が使用されている要素やコンポーネントに基づいて、` inputRef.value ` の型を自動的に推論します。
35+
36+ <details >
37+ <summary >3.5 以前の使用方法</summary >
38+
39+ ` useTemplateRef() ` が導入されていなかった 3.5 以前のバージョンでは、テンプレート内の ` ref ` 属性の値と同じ名前で ` ref ` を宣言する必要がありました:
1640
1741``` vue
1842<script setup>
@@ -46,6 +70,8 @@ export default {
4670}
4771```
4872
73+ </details >
74+
4975</div >
5076<div class =" options-api " >
5177
@@ -95,6 +121,33 @@ watchEffect(() => {
95121
96122` v-for ` の中で ` ref ` を使用すると、対応する参照には配列値が格納されます。そしてこの配列値には、マウント後の要素が代入されます:
97123
124+ ``` vue
125+ <script setup>
126+ import { ref, useTemplateRef, onMounted } from 'vue'
127+
128+ const list = ref([
129+ /* ... */
130+ ])
131+
132+ const itemRefs = useTemplateRef('items')
133+
134+ onMounted(() => console.log(itemRefs.value))
135+ </script>
136+
137+ <template>
138+ <ul>
139+ <li v-for="item in list" ref="items">
140+ {{ item }}
141+ </li>
142+ </ul>
143+ </template>
144+ ```
145+
146+ [ Playground で試す] ( https://play.vuejs.org/#eNp9UsluwjAQ/ZWRLwQpDepyQoDUIg6t1EWUW91DFAZq6tiWF4oU5d87dtgqVRyyzLw3b+aN3bB7Y4ptQDZkI1dZYTw49MFMuBK10dZDAxZXOQSHC6yNLD3OY6zVsw7K4xJaWFldQ49UelxxVWnlPEhBr3GszT6uc7jJ4fazf4KFx5p0HFH+Kme9CLle4h6bZFkfxhNouAIoJVqfHQSKbSkDFnVpMhEpovC481NNVcr3SaWlZzTovJErCqgydaMIYBRk+tKfFLC9Wmk75iyqg1DJBWfRxT7pONvTAZom2YC23QsMpOg0B0l0NDh2YjnzjpyvxLrYOK1o3ckLZ5WujSBHr8YL2gxnw85lxEop9c9TynkbMD/kqy+svv/Jb9wu5jh7s+jQbpGzI+ZLu0byEuHZ+wvt6Ays9TJIYl8A5+i0DHHGjvYQ1JLGPuOlaR/TpRFqvXCzHR2BO5iKg0Zmm/ic0W2ZXrB+Gve2uEt1dJKs/QXbwePE )
147+
148+ <details >
149+ <summary >3.5 以前の使用方法</summary >
150+
98151``` vue
99152<script setup>
100153import { ref, onMounted } from 'vue'
@@ -117,7 +170,7 @@ onMounted(() => console.log(itemRefs.value))
117170</template>
118171```
119172
120- [ Playground で試す ] ( https://play.vuejs.org/#eNpFjs1qwzAQhF9l0CU2uDZtb8UOlJ576bXqwaQyCGRJyCsTEHr3rGwnOehnd2e+nSQ+vW/XqMSH6JdL0J6wKIr+LK2evQuEhKCmBs5+u2hJ/SNjCm7GiV0naaW9OLsQjOZrKNrq97XBW4P3v/o51qTmHzUtd8k+e0CrqsZwRpIWGI0KVN0N7TqaqNp59JUuEt2SutKXY5elmimZT9/t2Tk1F+z0ZiTFFdBHs738Mxrry+TCIEWhQ9sttRQl0tEsK6U4HEBKW3LkfDA6o3dst3H77rFM5BtTfm/P )
173+ </ details >
121174
122175</div >
123176<div class =" options-api " >
@@ -173,6 +226,26 @@ export default {
173226
174227<div class =" composition-api " >
175228
229+ ``` vue
230+ <script setup>
231+ import { useTemplateRef, onMounted } from 'vue'
232+ import Child from './Child.vue'
233+
234+ const childRef = useTemplateRef('child')
235+
236+ onMounted(() => {
237+ // child.value は <Child /> のインスタンスを保持します。
238+ })
239+ </script>
240+
241+ <template>
242+ <Child ref="child" />
243+ </template>
244+ ```
245+
246+ <details >
247+ <summary >3.5 以前の使用方法</summary >
248+
176249``` vue
177250<script setup>
178251import { ref, onMounted } from 'vue'
@@ -190,6 +263,8 @@ onMounted(() => {
190263</template>
191264```
192265
266+ </details >
267+
193268</div >
194269<div class =" options-api " >
195270
0 commit comments