質問編集履歴

4

App Routerについて追記。

2023/06/22 05:27

投稿

yuntan
yuntan

スコア1

test CHANGED
@@ -1 +1 @@
1
- Next.js 13でサーバー側で最新の情報を用いてHTMLをレンダリングし、かつポーリングして表示更新する
1
+ Next.js 13のApp Routerでサーバー側で最新の情報を用いてHTMLをレンダリングし、かつポーリングして表示更新する
test CHANGED
@@ -7,7 +7,7 @@
7
7
  3. APIをポーリングし、表示を更新する(実装済みだが、 `useEffect` を使うことでClient Componentになってしまう)。
8
8
 
9
9
  ### 前提
10
- Next.js 13でWebアプリを開発していますが、上記の要件を満たす方法が分かりません。
10
+ Next.js 13のApp RouterでWebアプリを開発していますが、上記の要件を満たす方法が分かりません。
11
11
 
12
12
  ### 該当のソースコード
13
13
 

3

クロスポストについて追記。

2023/06/22 05:25

投稿

yuntan
yuntan

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,5 @@
1
- StackOverflowとのクロスポストす。
1
+ 回答を迅速に得るため、StackOverflowとのクロスポストを行っております。
2
+ https://ja.stackoverflow.com/questions/95322
2
3
 
3
4
  ### 実現したいこと
4
5
  1. ページ単位で状態を共有する(実装済みだが、Next.jsの枝葉をClient Componentにして幹はServer Componentにするという原則に反してしまっているので、できれば解消したい)。

2

「試したこと」を追記

2023/06/22 03:49

投稿

yuntan
yuntan

スコア1

test CHANGED
File without changes
test CHANGED
@@ -103,6 +103,26 @@
103
103
 
104
104
  フロントエンドです。Client Componentに指定しています。
105
105
 
106
+ ### 試したこと
107
+ 以下のように書き換えてみました。
108
+
109
+ ```typescript:app/page.tsx
110
+ async function App() {
111
+ console.log('rendering App');
112
+
113
+ // const [items, setItems] = useState<QueueItem[]>([]);
114
+ let items = await fetch(`/api/streams`, { next: { revalidate: 10 } }).then(res => res.json()) as QueueItem[];
115
+ const [currentItemID, setCurrentItemID] = useState('');
116
+ const videoID = items.find(item => item.id === currentItemID)?.media.videoID;
117
+
118
+ return (
119
+ ...
120
+ );
121
+ }
122
+ ```
123
+
124
+ サーバーにおいてレンダリングされているようですが、 `TypeError: Failed to parse URL from /api/streams` というエラーが出ます。また、ブラウザ側で再描画とネットワークリクエストが無限ループします。
125
+
106
126
  ### 補足情報(FW/ツールのバージョンなど)
107
127
 
108
128
  ```json

1

「実現したいこと」に番号を振りました。

2023/06/22 03:12

投稿

yuntan
yuntan

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,9 +1,9 @@
1
1
  StackOverflowとのクロスポストです。
2
2
 
3
3
  ### 実現したいこと
4
- - ページ単位で状態を共有する(実装済みだが、Next.jsの枝葉をClient Componentにして幹はServer Componentにするという原則に反してしまっているので、できれば解消したい)。
4
+ 1. ページ単位で状態を共有する(実装済みだが、Next.jsの枝葉をClient Componentにして幹はServer Componentにするという原則に反してしまっているので、できれば解消したい)。
5
- - ブラウザでページロード時に即座に最新の情報が表示されるようにするため、サーバー側で最新の情報を用いてHTMLをレンダリングする(必ずしも必要な機能ではないが、技術的チャレンジとして)。
5
+ 2. ブラウザでページロード時に即座に最新の情報が表示されるようにするため、サーバー側で最新の情報を用いてHTMLをレンダリングする(必ずしも必要な機能ではないが、技術的チャレンジとして)。
6
- - APIをポーリングし、表示を更新する(実装済みだが、 `useEffect` を使うことでClient Componentになってしまう)。
6
+ 3. APIをポーリングし、表示を更新する(実装済みだが、 `useEffect` を使うことでClient Componentになってしまう)。
7
7
 
8
8
  ### 前提
9
9
  Next.js 13でWebアプリを開発していますが、上記の要件を満たす方法が分かりません。