Skip to content

Commit dd4e707

Browse files
hikimonkazupon
authored andcommitted
"Client Side Hydration" の翻訳 (#36)
* Translate hydration.md via GitLocalize * Translate hydration.md via GitLocalize
1 parent d35744d commit dd4e707

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

ja/hydration.md

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# クライアントサイドでのハイドレーション
2+
3+
`entry-client.js` において、以下の記述で私たちは簡単にアプリケーションをマウントします。
4+
5+
```js
6+
// これは、ルート要素に id="app" をもつ App.vue テンプレートを想定します。
7+
app.$mount('#app')
8+
```
9+
10+
サーバがマークアップを描画後に、この処理を実行し、すべての DOM を再生成することを私たちは当然したくありません。代わりに、静的なマークアップの"ハイドレート"とそれをインタラクティブに生成したいです。
11+
12+
もしあなたがサーバレンダリングの出力を調べたら、アプリケーションのルート要素が以下のような特別な属性を持っていることに気づくでしょう。
13+
14+
```js
15+
<div id="app" data-server-rendered="true">
16+
```
17+
18+
この `data-server-rendered` という特別な属性は、クライアントサイドの Vue に、これがサーバ上で描画されたことを知らせ、この要素はハイドレーションモードでマウントされるはずです。
19+
20+
開発モードでは、Vue はクラインアントサイドで生成された仮想 DOM が、サーバで描画された DOM の構成とマッチしているか検証を行います。もしこれがマッチしていない場合、ハイドレーションを取りやめ、元の DOM を無視しスクラッチから描画を行います。**プロダクションモードでは、パフォーマンスの最大化のため、このアサーションは無効になります。**
21+
22+
### ハイドレーション時の注意
23+
24+
サーバサイドレンダリングとクライアントサイドでのハイドレーションを行なった場合、ある特定の HTML の構造はブラウザによって変換されるかもしれないことがわかっています。例えば、あなたが Vueのテンプレート内に、以下のような記述をした場合です。
25+
26+
```html
27+
<table>
28+
<tr><td>hi</td></tr>
29+
</table>
30+
```
31+
32+
ブラウザは、自動で `<tbody>``<table>` に挿入します。しかし、Vue によって生成された仮想 DOM は、`<tbody>` を含みません。そのため、ミスマッチが起こります。正しいマッチングを保証するために、あなたのテンプレート内では、必ず有効な HTML を記述してください。

0 commit comments

Comments
 (0)