@@ -11,7 +11,7 @@ title: "'use client'"
11
11
12
12
<Intro >
13
13
14
- ` 'use client' ` により、ソースファイルがクライアント上で実行されるコンポーネントが書かれたものである、とマークします 。
14
+ ` 'use client' ` でソースファイルをマークすることにより、ファイル内のコンポーネントがクライアント上で実行されることを示します 。
15
15
16
16
</Intro >
17
17
@@ -23,7 +23,7 @@ title: "'use client'"
23
23
24
24
### ` 'use client' ` {/* use-client* /}
25
25
26
- ファイルの最上部に ` 'use client'; ` を追加すると、どこからインポートされたファイルであるかに関わらず、そのファイル (それが使用する任意の子コンポーネントを含む)がクライアント上で実行されるものであるとマークします 。
26
+ ファイルの最上部に ` 'use client'; ` を追加すると、どこでインポートされているかに関わらず、当該ファイル (それが使用する任意の子コンポーネントを含む)はクライアント上で実行されるものである、とマークします 。
27
27
28
28
``` js
29
29
' use client' ;
@@ -34,19 +34,19 @@ export default function RichTextEditor(props) {
34
34
// ...
35
35
` ` `
36
36
37
- ` ' use client' ` がマークされたファイルがサーバコンポーネントからインポートされると 、[互換性のあるバンドラ](/learn/start-a-new-react-project#bleeding-edge-react-frameworks)は、そのインポートをサーバ専用のコードとクライアントコードとの間の「切り離し点 (cut-off point) 」として扱います。モジュールグラフでこの点およびこの点より下側にあるコンポーネントは 、[` useState` ](/reference/react/useState) のようなクライアント専用の React 機能を使用できます。
37
+ ` ' use client' ` とマークされたファイルがサーバコンポーネントからインポートされると 、[互換性のあるバンドラ](/learn/start-a-new-react-project#bleeding-edge-react-frameworks)は、当該インポートをサーバ専用コードとクライアントコードとの間の「切り離しポイント 」として扱います。モジュールグラフでこのポイントおよび下側にあるコンポーネントは 、[` useState` ](/reference/react/useState) のようなクライアント専用の React 機能を使用できます。
38
38
39
39
#### 注意点 {/*caveats*/}
40
40
41
41
* クライアント専用の React 機能を使用するあらゆるファイルに ` ' use client' ` を追加していく必要はありません。サーバコンポーネントファイルからインポートされるファイルにのみ追加します。` ' use client' ` はサーバ専用コードとクライアントコードとの間の*境界*を示すものです。ここよりツリーの下側にあるあらゆるコンポーネントは自動的にクライアント上で実行されます。` ' use client' ` の書かれたファイルからエクスポートされるコンポーネントはサーバコンポーネントからレンダーされるため、シリアライズ可能な props を持つ必要があります。
42
- * ` ' use client' ` ファイルがサーバファイルからインポートされる場合、インポートされた値は React コンポーネントとしてレンダーされるか、もしくはクライアントコンポーネントに props 経由で渡されます。それ以外の使い方をすると例外をスローします。
43
- * ` ' use client' ` ファイルが他のクライアントファイルからインポートされる場合、ディレクティブは効果を持ちません 。これにより、サーバコンポーネントとクライアントコンポーネントの両方から使用できるクライアント専用のコンポーネントを作成できます 。
44
- * ` ' use client' ` ファイルのすべてのコード 、およびそれが(直接的にまたは間接的に)インポートするすべてのモジュールはクライアントモジュールグラフの一部となるため、ブラウザが表示するためにはクライアントに送信され、クライアントで実行される必要があります 。クライアントでのバンドルサイズを減らし、サーバ機能を最大限に活用するためには、可能な限りツリーの下部に state(および ` ' use client' ` ディレクティブ)を移動し、レンダーされたサーバコンポーネントを [children として](/learn/passing-props-to-a-component#passing-jsx-as-children)クライアントコンポーネントに渡します 。
45
- * props はサーバとクライアントの境界を越えてシリアライズされるため、これらのディレクティブの配置の仕方がクライアントに送信されるデータ量に影響を与える可能性があります 。必要以上に大きなデータ構造を避けてください。
42
+ * ` ' use client' ` ファイルがサーバファイルからインポートされる場合、インポートされる値は React コンポーネントとしてレンダーされるか、もしくはクライアントコンポーネントに props 経由で渡されます。それ以外の使い方をすると例外をスローします。
43
+ * ` ' use client' ` ファイルが他のクライアントファイルからインポートされる場合、ディレクティブは効果を有しません 。これにより、サーバコンポーネントからもクライアントコンポーネントからも使えるクライアント専用コンポーネントを書くことができます 。
44
+ * ` ' use client' ` ファイル内のすべてのコード 、およびそれが(直接的にまたは間接的に)インポートするすべてのモジュールはクライアントモジュールグラフの一部となるため、ブラウザが表示するためにはクライアントに送信され、実行される必要があります 。クライアントでのバンドルサイズを減らし、サーバ機能を最大限に活用するためには、可能な限りツリーの下部に state(および ` ' use client' ` ディレクティブ)を移動し、レンダーされたサーバコンポーネントを [children として](/learn/passing-props-to-a-component#passing-jsx-as-children)クライアントコンポーネントに渡すようにします 。
45
+ * props はサーバとクライアントの境界を越えてシリアライズされるため、ディレクティブの配置の仕方がクライアントに送信されるデータ量に影響を与える可能性があります 。必要以上に大きなデータ構造を避けてください。
46
46
* サーバ専用機能もクライアント専用機能も使用しないコンポーネント(例:` < MarkdownRenderer> ` )は、一般的に ` ' use client' ` でマークすべきではありません。マークしないことにより、サーバコンポーネントから使用されるときにはサーバ上でのみレンダーされ、クライアントコンポーネントから使用されるときにはクライアントバンドルに含まれるようになります。
47
- * npm に公開されるライブラリは、クライアント専用の React 機能を使用しており、シリアライズ可能な props でレンダーできる React コンポーネントに 、` ' use client' ` を含めるべきです 。これにより、それらのコンポーネントをサーバコンポーネントからインポートしてレンダーすることが可能になります。さもないと、ユーザはライブラリコンポーネントを自分で ` ' use client' ` ファイルにラップしなければなりません。これは面倒ですし、ライブラリが後でロジックをサーバに移動できなくなってしまいます。事前バンドル済のファイルを npm に公開する際は 、` ' use client' ` となっているソースファイルは ` ' use client' ` でマークされたバンドルに含まれるようにし、サーバ上で直接使用できるエクスポートを含むバンドルとは別になるようにしてください 。
48
- * クライアントコンポーネントは、今後もサーバサイドレンダリング (server-side rendering, SSR) やビルド時の静的サイト生成 (static site generation, SSG) の一部としては実行されます 。これらは、コンポーネントの初期レンダー出力を HTML に変換し、JavaScript バンドルがダウンロードされる前に表示を行えるようにするために使えます 。しかし、データベースから直接読み取るといったサーバ専用機能は使用できません。
49
- * ` ' use client' ` のようなディレクティブは、ファイルの冒頭部分、あらゆるインポート文や他のコードの上になければなりません(ただしディレクティブの上にコメントは記載できます)。シングルクォートまたはダブルクォートで書かれていなければならず 、バックティックは使えません。(` ' use xyz' ` というディレクティブ形式は ` useXyz ()` というフックの命名規則に多少似ていますが、これは偶然です。)
47
+ * npm に公開されるライブラリは、エクスポートしているコンポーネントがシリアライズ可能な props でレンダーでき、クライアント専用の React 機能を使用している場合 、`'use client'` を含めるようにすべきです 。これにより、それらのコンポーネントをサーバコンポーネントからインポートしてレンダーすることが可能になります。さもないと、ユーザはライブラリコンポーネントを自分で `'use client'` ファイルにラップしなければなりません。これは面倒ですし、ライブラリが後でロジックをサーバに移動できなくなってしまいます。事前バンドル済のファイルを npm で公開する際は 、`'use client'` となっているソースファイルは `'use client'` でマークされたバンドルに含まれるようにし、サーバ上で直接使用できるエクスポートを含んだバンドルとは別になるようにしてください 。
48
+ * クライアントコンポーネントは、今後もサーバサイドレンダリング (server-side rendering, SSR) やビルド時の静的サイト生成 (static site generation, SSG) の過程としては実行されます 。これらは、コンポーネントの初期レンダー出力を HTML に変換し、JavaScript バンドルのダウンロード前に表示を行えるようにするために使われます 。しかし、データベースから直接読み取るといったサーバ専用機能は使用できません。
49
+ * ` ' use client' ` のようなディレクティブは、ファイルの冒頭部分で、あらゆるインポート文や他のコードより上になければなりません(ただしコメントはディレクティブの上に記載できます)。シングルクォートまたはダブルクォートで書く必要があり 、バックティックは使えません。(` ' use xyz' ` というディレクティブの形式は ` useXyz ()` というフックの命名規則に多少似ていますが、これは偶然です。)
50
50
51
51
## 使用法 {/*usage*/}
52
52
0 commit comments