teratail header banner
teratail header banner
質問するログイン新規登録
Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

302閲覧

Next.js(App Router)で、ビルド時のデータのまま、動的に最新のデータが取得できない。

junos

総合スコア3

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2024/06/08 09:50

0

0

実現したいこと

・DBにinsertしたり、updateしたときに、新しいデータを表示させたい。

前提

フレームワークはNext.js(App Router)で、ORMはPrismaを使っています。
APIルートでデータを取得した後、クライアントコンポーネントでuseEffectを使って、最新データをリロードしようと試みていました。
開発環境では問題なく動作しましたが、Vercelにデプロイするとビルド時のデータのまま動きません。
動的にデータを取得するとき、APIを介してfetchしないほうがいいのでしょうか。

発生している問題・エラーメッセージ

エラーメッセージはなし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uky

2024/06/10 02:41

useEffectの依存配列には何を入れていますか??
uky

2024/06/10 02:42

載せれる範囲で構いませんので、該当のソースコードをいただければ回答できるかもしれません!
junos

2024/07/21 07:56

>>ukyさん ありがとうございます。お返事が遅くなりました。 useEffectの部分はこんな感じで書いています。 React.useEffect(() => { const fetchData = async () => { const response = await fetch('./api/Sample') const data = await response.json() setData(data) } fetchData() }, []) ちなみに、このコードを書いているファイルの先頭で、 export const dynamic = 'force-dynamic' をつけると、予期した動作になりました。 正解とは違うかもしれませんが、今はとりあえずこれでしのいでいます。
uky

2024/07/22 01:57

一旦は解消できているとのことで良かったです! いただいている内容だけでは不透明なところが多く、パッと回答できなさそうですが、 DBへの書き込み後に書き込み後のデータをどのようにfetchしているのか次第な気がしました。 現状ではuseEffect内で初期マウント時にのみfetchするような処理に見えますので、ページ自体を更新(リロード等)させることで初期マウントを発生させる必要があるのではないでしょうか。 その点で言えば、force-dynamicはひとつ、解決の選択肢としては有効になったのだと思います。(強制的にサーバーフェッチ(≒ SSR)をかけるのでクライアントコンポーネントと呼べるのかわからないですが。。。 > https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config ``` 'force-dynamic': Force dynamic rendering, which will result in routes being rendered for each user at request time. This option is equivalent to getServerSideProps() in the pages directory. ```
junos

2024/07/22 13:38

ukyさん ありがとうございます! おっしゃる通りで、データ更新後に再検証を挟むことで無駄をなくすことができたと思います! とても助かりました!
guest

回答1

0

自己解決

データ更新の時に再検証させる
または

export const dynamic = 'force-dynamic'

を付け加えることで解決

投稿2024/07/22 13:40

junos

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問