質問はシンプルで、タイトルのとおりです。
pages
内にあるindex.tsx
からcomponents
内にあるHeader.tsx
を呼び出すとします。
typescript
1import Header from '../components/global/Header'; 2 3export default function Home(data: { }) { 4 return ( 5 <div className={styles.container}> 6 <Header/> 7 </div> 8 ) 9}
このとき、このHeader.tsx
内からデータベースにアクセスしたいです。
しかしgetServerSideProps
を使う方法はpages
内のコンテンツからしかできないようです。
今考えている方法は2つあります。
- REST APIを作って
Header
からそれを呼び出す index.tsx
内にgetServerSideProps
を定義し、そこからデータを取得する
しかしいずれもHeader
内から直接データベースにアクセスするものではなく、処理はHeader
で完結しません。
REST APIを作るのはサーバーのセキュリティ低下に繋がる可能性もありますし、HTTPリクエスト回数が増えることにも繋がります。また、SSRの恩恵を受けることができません。
index.tsx
の中に記述する方法は、Header
の呼び出し側がHeader
のロジックに依存することに繋がりかねず、また同様の処理をindex.tsx
以外のページにもコピペしなければいけません。カプセル化ができているとは言えず、気持ち悪いです。
現時点では後者の方法を検討しています。Header
に必要なデータを新しいinterface
に切り出し、そのinterface
の中身を埋めるメソッドを新たに作成し、それをindex.tsx
のgetServerSideProps
から呼び出す方向で考えています。
上記の方法を試す前に一度確認したいのですが、Header
からサーバーサイドの処理を直接呼び出すことは可能ですか?
また、何か別の効率的な方法がありますか?
環境
macOS Catalina
Node.js 12
Next.js 11.0.1
React 17.0.2
TypeScript

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/13 13:46