回答編集履歴
1
構造化、コード例の追加
answer
CHANGED
@@ -6,6 +6,8 @@
|
|
6
6
|
|
7
7
|
---
|
8
8
|
|
9
|
+
## 1. 「Client Component だから SSR されない」は誤り
|
10
|
+
|
9
11
|
まず、「Client Component だから SSR されない」と思っていらっしゃるとしたら、それは誤りです。
|
10
12
|
|
11
13
|
Server Component (以下 SC)は、getServerSideProps と同様に「SSR のための、前段階の処理」であるに過ぎません。
|
@@ -14,6 +16,8 @@
|
|
14
16
|
|
15
17
|
https://zenn.dev/yumemi_inc/articles/use-client-directive-explained-with-gssp
|
16
18
|
|
19
|
+
## 2. 「パフォーマンスのために SSR にする」の解釈のしかたの誤り
|
20
|
+
|
17
21
|
あと、巷で言われている「**CSR が重いから、SSR にすべき**」というのを、App Router に正しく翻訳すると、
|
18
22
|
|
19
23
|
- 「CSR が重い」
|
@@ -24,8 +28,34 @@
|
|
24
28
|
|
25
29
|
です。
|
26
30
|
|
31
|
+
## 3. まとめ
|
32
|
+
|
27
33
|
なので、無理に `app/layout.js` を SC 化する必要はありません。
|
28
34
|
|
29
35
|
各ページ `app/hogehoge/page.js` を、`"use client"` なしで書けば、それは SC になり(**ここも、誤解なさっている可能性がありますが、重要なところです**)、その中で取得したデータを、ページ内の各部分に配分すれば良いのです。
|
30
36
|
|
31
|
-
その「ページ内の各部分」は、SC であっても CC であっても、特に問題ありません。
|
37
|
+
その「ページ内の各部分」は、SC であっても CC であっても、特に問題ありません。
|
38
|
+
|
39
|
+
以下のように書けます!
|
40
|
+
|
41
|
+
```books/page.js
|
42
|
+
// "use client" が無いので、SC
|
43
|
+
import { BookList } from "./book-list.js";
|
44
|
+
import { getBooks } from "./get-books.js";
|
45
|
+
|
46
|
+
const BooksIndexPage = async () => {
|
47
|
+
const books = await getBooks();
|
48
|
+
return (
|
49
|
+
<div>
|
50
|
+
<BooksFilter />
|
51
|
+
<BooksList items={books} />
|
52
|
+
</div>
|
53
|
+
);
|
54
|
+
}
|
55
|
+
export default BooksIndexPage;
|
56
|
+
```
|
57
|
+
|
58
|
+
```books/book-list.js
|
59
|
+
"use client"
|
60
|
+
export const BookList = () => { // 以下略
|
61
|
+
```
|