Skip to content

Commit 063f499

Browse files
authored
feat: more enhanced code blocks (#2602)
1 parent 4adc3b8 commit 063f499

File tree

14 files changed

+87
-120
lines changed

14 files changed

+87
-120
lines changed

src/api/sfc-script-setup.md

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -298,16 +298,20 @@ function inc() {
298298
:::warning
299299
もし `defineModel` props に `default` 値を指定し、親コンポーネントからこの props に何も値を与えなかった場合、親と子のコンポーネント間で同期が取れなくなる可能性があります。以下の例では、親コンポーネントの `myRef` は undefined ですが、子コンポーネントの `model` は 1 です:
300300

301-
```js
302-
// 子コンポーネント:
301+
```vue [Child.vue]
302+
<script setup>
303303
const model = defineModel({ default: 1 })
304+
</script>
305+
```
304306

305-
// 親コンポーネント:
307+
```vue [Parent.vue]
308+
<script setup>
306309
const myRef = ref()
307-
```
310+
</script>
308311
309-
```html
310-
<Child v-model="myRef"></Child>
312+
<template>
313+
<Child v-model="myRef" />
314+
</template>
311315
```
312316

313317
:::

src/guide/built-ins/transition.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -469,8 +469,7 @@ JavaScript のみでトランジションを利用する場合、通常は `:css
469469

470470
トランジションは、Vue のコンポーネントシステムによって再利用できます。再利用可能なトランジションを作成するには、`<Transition>` コンポーネントをラップしたコンポーネントを作成し、スロットコンテンツを受け渡します:
471471

472-
```vue{5}
473-
<!-- MyTransition.vue -->
472+
```vue{6} [MyTransition.vue]
474473
<script>
475474
// JavaScript フックのロジックを記載 ...
476475
</script>
@@ -615,7 +614,7 @@ export default {
615614
data() {
616615
return {
617616
count: 1,
618-
interval: null
617+
interval: null
619618
}
620619
},
621620
mounted() {

src/guide/components/provide-inject.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,8 +327,7 @@ export default {
327327

328328
シンボルは専用のファイルに書き出しておくことをおすすめします:
329329

330-
```js
331-
// keys.js
330+
```js [keys.js]
332331
export const myInjectionKey = Symbol()
333332
```
334333

src/guide/components/v-model.md

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212

1313
Vue 3.4 以降は、[`defineModel()`](/api/sfc-script-setup#definemodel) マクロを使うことが推奨されています:
1414

15-
```vue
16-
<!-- Child.vue -->
15+
```vue [Child.vue]
1716
<script setup>
1817
const model = defineModel()
1918
@@ -30,8 +29,7 @@ function update() {
3029

3130
親は `v-model` で値をバインドできます:
3231

33-
```vue-html
34-
<!-- Parent.vue -->
32+
```vue-html [Parent.vue]
3533
<Child v-model="countModel" />
3634
```
3735

@@ -63,8 +61,7 @@ const model = defineModel()
6361

6462
3.4 以前は、上記の子コンポーネントはこのように実装されていました:
6563

66-
```vue
67-
<!-- Child.vue -->
64+
```vue [Child.vue]
6865
<script setup>
6966
const props = defineProps(['modelValue'])
7067
const emit = defineEmits(['update:modelValue'])
@@ -80,8 +77,7 @@ const emit = defineEmits(['update:modelValue'])
8077

8178
すると、親コンポーネントの `v-model="foo"` は次のようにコンパイルされます:
8279

83-
```vue-html
84-
<!-- Parent.vue -->
80+
```vue-html [Parent.vue]
8581
<Child
8682
:modelValue="foo"
8783
@update:modelValue="$event => (foo = $event)"
@@ -103,20 +99,20 @@ const model = defineModel({ default: 0 })
10399
:::warning
104100
もし `defineModel` props に `default` 値を指定し、親コンポーネントからこの props に何も値を与えなかった場合、親と子のコンポーネント間で同期が取れなくなる可能性があります。以下の例では、親コンポーネントの `myRef` は undefined ですが、子コンポーネントの `model` は 1 です:
105101

106-
**子コンポーネント:**
107-
108-
```js
102+
```vue [Child.vue]
103+
<script setup>
109104
const model = defineModel({ default: 1 })
105+
</script>
110106
```
111107

112-
**親コンポーネント:**
113-
114-
```js
108+
```vue [Parent.vue]
109+
<script setup>
115110
const myRef = ref()
116-
```
111+
</script>
117112
118-
```html
119-
<Child v-model="myRef"></Child>
113+
<template>
114+
<Child v-model="myRef"></Child>
115+
</template>
120116
```
121117

122118
:::
@@ -156,8 +152,7 @@ const myRef = ref()
156152

157153
実際には次のようになります:
158154

159-
```vue
160-
<!-- CustomInput.vue -->
155+
```vue [CustomInput.vue]
161156
<script>
162157
export default {
163158
props: ['modelValue'],
@@ -183,8 +178,7 @@ export default {
183178

184179
このコンポーネントで `v-model` を実装するもう 1 つの方法は、getter と setter の両方を持つ、書き込み可能な `computed` プロパティを使用することです。`get` メソッドは `modelValue` プロパティを返し、`set` メソッドは対応するイベントを発行する必要があります:
185180

186-
```vue
187-
<!-- CustomInput.vue -->
181+
```vue [CustomInput.vue]
188182
<script>
189183
export default {
190184
props: ['modelValue'],
@@ -221,8 +215,7 @@ export default {
221215

222216
子コンポーネントでは、`defineModel()` の第一引数に文字列を渡すことで、対応する引数をサポートできます:
223217

224-
```vue
225-
<!-- MyComponent.vue -->
218+
```vue [MyComponent.vue]
226219
<script setup>
227220
const title = defineModel('title')
228221
</script>
@@ -243,8 +236,7 @@ const title = defineModel('title', { required: true })
243236
<details>
244237
<summary>3.4 以前の使用法</summary>
245238

246-
```vue
247-
<!-- MyComponent.vue -->
239+
```vue [MyComponent.vue]
248240
<script setup>
249241
defineProps({
250242
title: {
@@ -271,8 +263,7 @@ defineEmits(['update:title'])
271263

272264
この場合、デフォルトの `modelValue` props と `update:modelValue` イベントの代わりに、子コンポーネントは `title` props を受け取り、親コンポーネントの値を更新するためには `update:title` イベントを発行します:
273265

274-
```vue
275-
<!-- MyComponent.vue -->
266+
```vue [MyComponent.vue]
276267
<script>
277268
export default {
278269
props: ['title'],
@@ -412,7 +403,7 @@ console.log(modifiers) // { capitalize: true }
412403

413404
修飾子に基づいて値の読み書きを条件付きで調整するために、`defineModel()``get``set` オプションを渡すことができます。これら 2 つのオプションは、モデルの ref の読み取り・設定時に値を受け取り、変換された値を返す必要があります。以下は `set` オプションを使って `capitalize` 修飾子を実装する方法です:
414405

415-
```vue{6-8}
406+
```vue{4-6}
416407
<script setup>
417408
const [model, modifiers] = defineModel({
418409
set(value) {

src/guide/essentials/component-basics.md

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,7 @@ props はコンポーネントに登録できるカスタム属性のことで
188188

189189
<div class="options-api">
190190

191-
```vue
192-
<!-- BlogPost.vue -->
191+
```vue [BlogPost.vue]
193192
<script>
194193
export default {
195194
props: ['title']
@@ -206,8 +205,7 @@ props 属性に値が渡されると、その値はコンポーネントイン
206205
</div>
207206
<div class="composition-api">
208207

209-
```vue
210-
<!-- BlogPost.vue -->
208+
```vue [BlogPost.vue]
211209
<script setup>
212210
defineProps(['title'])
213211
</script>
@@ -352,8 +350,8 @@ const postFontSize = ref(1)
352350

353351
では、`<BlogPost>` コンポーネントのテンプレートにボタンを追加してみましょう:
354352

355-
```vue{5}
356-
<!-- BlogPost.vue, omitting <script> -->
353+
```vue{5} [BlogPost.vue]
354+
<!-- omitting <script> -->
357355
<template>
358356
<div class="blog-post">
359357
<h4>{{ title }}</h4>
@@ -373,8 +371,8 @@ const postFontSize = ref(1)
373371

374372
そして、子コンポーネントは組み込みの [**`$emit`** メソッド](/api/component-instance#emit)を呼び出し、イベント名を渡すことによって自身のイベントを発行することができます:
375373

376-
```vue{5}
377-
<!-- BlogPost.vue, omitting <script> -->
374+
```vue{5} [BlogPost.vue]
375+
<!-- omitting <script> -->
378376
<template>
379377
<div class="blog-post">
380378
<h4>{{ title }}</h4>
@@ -400,8 +398,7 @@ const postFontSize = ref(1)
400398

401399
<div class="options-api">
402400

403-
```vue{5}
404-
<!-- BlogPost.vue -->
401+
```vue{4} [BlogPost.vue]
405402
<script>
406403
export default {
407404
props: ['title'],
@@ -413,8 +410,7 @@ export default {
413410
</div>
414411
<div class="composition-api">
415412

416-
```vue{4}
417-
<!-- BlogPost.vue -->
413+
```vue{3} [BlogPost.vue]
418414
<script setup>
419415
defineProps(['title'])
420416
defineEmits(['enlarge-text'])
@@ -472,8 +468,7 @@ HTML 要素と同じように、以下のようにコンポーネントにコン
472468

473469
これは Vue のカスタム要素 `<slot>` を用いて実現することができます:
474470

475-
```vue{5}
476-
<!-- AlertBox.vue -->
471+
```vue{4} [AlertBox.vue]
477472
<template>
478473
<div class="alert-box">
479474
<strong>This is an Error for Demo Purposes</strong>

src/guide/extras/web-components.md

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ export default {
4343

4444
#### Vue CLI 設定の例 {#example-vue-cli-config}
4545

46-
```js
47-
// vue.config.js
46+
```js [vue.config.js]
4847
module.exports = {
4948
chainWebpack: (config) => {
5049
config.module
@@ -218,8 +217,7 @@ Vue でカスタム要素をビルドする場合、要素は Vue のランタ
218217

219218
個々の要素コンストラクタをエクスポートして、ユーザーに必要に応じてインポートさせたり、必要なタグ名で登録できる柔軟性を持たせることをおすすめします。また、すべての要素を自動的に登録する便利な関数をエクスポートすることもできます。以下は、Vue カスタム要素ライブラリのエントリーポイントの例です:
220219

221-
```js
222-
// elements.js
220+
```js [elements.js]
223221

224222
import { defineCustomElement } from 'vue'
225223
import Foo from './MyFoo.ce.vue'
@@ -311,9 +309,7 @@ Vue で構築されていないカスタム要素の SFC テンプレートで
311309

312310
いくつかの JS プロパティとイベントが定義されたカスタム要素があり、それが `some-lib` というライブラリーに同梱されているとします:
313311

314-
```ts
315-
// file: some-lib/src/SomeElement.ts
316-
312+
```ts [some-lib/src/SomeElement.ts]
317313
// 型付き JS プロパティを持つクラスを定義します。
318314
export class SomeElement extends HTMLElement {
319315
foo: number = 123
@@ -351,9 +347,7 @@ export class AppleFellEvent extends Event {
351347

352348
Vue でカスタム要素の型定義を簡単に登録するための型ヘルパーを作成してみましょう
353349

354-
```ts
355-
// file: some-lib/src/DefineCustomElement.ts
356-
350+
```ts [some-lib/src/DefineCustomElement.ts]
357351
// 定義する必要のある要素ごとに、このタイプのヘルパーを再利用することができます。
358352
type DefineCustomElement<
359353
ElementType extends HTMLElement,
@@ -394,9 +388,7 @@ type VueEmit<T extends EventMap> = EmitFn<{
394388
395389
型ヘルパーを使用して、Vue テンプレートで型チェックのために公開すべき JS プロパティを選択できます:
396390
397-
```ts
398-
// file: some-lib/src/SomeElement.vue.ts
399-
391+
```ts [some-lib/src/SomeElement.vue.ts]
400392
import {
401393
SomeElement,
402394
SomeElementAttributes,
@@ -465,7 +457,7 @@ onMounted(() => {
465457

466458
要素に型定義がない場合、プロパティとイベントの型はより手動で定義することができます:
467459

468-
```vue
460+
```vue [SomeElementImpl.vue]
469461
<script setup lang="ts">
470462
// `some-lib` が型定義のないプレーンな JavaScript で、TypeScript が型を
471463
// 推論できないと仮定します:

src/guide/reusability/composables.md

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Vue アプリケーションの文脈で「コンポーザブル(composable)
2121

2222
コンポーネント内で直接 Composition API を使ってマウストラッキング機能を実装すると、次のようになります:
2323

24-
```vue
24+
```vue [MouseComponent.vue]
2525
<script setup>
2626
import { ref, onMounted, onUnmounted } from 'vue'
2727
@@ -42,8 +42,7 @@ onUnmounted(() => window.removeEventListener('mousemove', update))
4242

4343
しかし、複数のコンポーネントで同じロジックを再利用したい場合はどうでしょうか? コンポーザブル関数として外部ファイルにロジックを抽出できます:
4444

45-
```js
46-
// mouse.js
45+
```js [mouse.js]
4746
import { ref, onMounted, onUnmounted } from 'vue'
4847

4948
// 慣習として、コンポーザブル関数の名前は "use" で始めます
@@ -70,7 +69,7 @@ export function useMouse() {
7069

7170
そしてこれがコンポーネント内での使い方です:
7271

73-
```vue
72+
```vue [MouseComponent.vue]
7473
<script setup>
7574
import { useMouse } from './mouse.js'
7675
@@ -92,8 +91,7 @@ const { x, y } = useMouse()
9291

9392
例えば、DOM イベントリスナーを追加・削除するロジックを独自のコンポーザブルに抽出できます:
9493

95-
```js
96-
// event.js
94+
```js [event.js]
9795
import { onMounted, onUnmounted } from 'vue'
9896

9997
export function useEventListener(target, event, callback) {
@@ -106,8 +104,7 @@ export function useEventListener(target, event, callback) {
106104

107105
これで `useMouse()` コンポーザブルは次のように簡略化できます:
108106

109-
```js{3,9-12}
110-
// mouse.js
107+
```js{2,8-11} [mouse.js]
111108
import { ref } from 'vue'
112109
import { useEventListener } from './event'
113110
@@ -157,8 +154,7 @@ fetch('...')
157154

158155
データを取得する必要があるすべてのコンポーネントでこのパターンを繰り返さなければならないのは面倒です。コンポーザブルに抽出してみましょう:
159156

160-
```js
161-
// fetch.js
157+
```js [fetch.js]
162158
import { ref } from 'vue'
163159

164160
export function useFetch(url) {
@@ -208,8 +204,7 @@ const { data, error } = useFetch(() => `/posts/${props.id}`)
208204

209205
[`watchEffect()`](/api/reactivity-core.html#watcheffect)[`toValue()`](/api/reactivity-utilities.html#tovalue) API を使用して、既存の実装をリファクタリングできます:
210206

211-
```js{8,13}
212-
// fetch.js
207+
```js{7,12} [fetch.js]
213208
import { ref, watchEffect, toValue } from 'vue'
214209
215210
export function useFetch(url) {

0 commit comments

Comments
 (0)