素直にページごとを独立した SPA と考えて実装していくほうが素直らしい Redux も頻度が減るだろうという考えらしい
Next.js がサーバーサイドで実行される際に実行
getServerSideProps と同じ効果ですが、next build
をしたタイミング等に一括で処理が実行される
next build
時に生成するパスを決定
全ユーザページを作成する際などに使用
// user/[uid].tsx
export async function getStaticPaths() {
const users = await getAllUsers();
return {
paths: users.map((user) => `/user/${user.id}`),
fallback: true,
};
}
API を実装する際は pages/
以下に作成する
refs: https://nextjs.org/docs/api-routes/api-middlewares
Next.js が 9 系の段階では共通処理を行うための仕組みはまだないので少々工夫する必要がある
- src/middleware.ts
- pages/api/holidays/[year].ts
refs: https://nextjs.org/docs/api-routes/api-middlewares#extending-the-reqres-objects-with-typescript
- MySQL 等と直接やりとりする
- ORM のの習熟がいまいち?
- WebSocket 等を使ったコネクションを永続化させるもの
- Pusher 等をかませると利用できそう(Nest.js/Blitz.js 等も利用してみると良いかも知れない)
全てのページをラップするもので、全ページで共通化したいときに便利です 例えば認証機能などは_app.js から呼び出すと良い グローバルな CSS もここで追加することになる
また、類似のものとして_document.js というファイルもあり、 これは更に上位でに相当する部分の組み立てから行うもの
例えば簡単な部分で言えばのようにしたい場合はわかりやすいです その他、Google Analytics のタグ設定や、上記でも説明してるように、CSS in JS のセットアップは概ね_document.js で行います
pages/404.js を作ると 404 ページをカスタマイズ出来ます 400 や 403 は標準には存在しないので getServerSideProps 等で res を加工する必要があるかもしれません
500 エラーの場合は pages/_error.js を利用します
loadable-components や react-loadable といった動的 import 用のライブラリは next/dynamic
で置き換え可能
pages/api
で API としての機能を備えているので独自のサーバレス環境(API サーバ)としても動作します
(Typescript でも普通に動作するという利点等がある)
Express 等と異なり、ファイル単位でのルーティングなので、猥雑にならず、動的ルーティングにも対応している
https://vercel.com/docs/serverless-functions/introduction
next-auth
がかなり強力
Slack 認証をする(OAuth Provider) https://zenn.dev/terrierscript/articles/2020-09-23-internal-admin-tools-auth-slack
next/babel
をインストールし、 .babelrc
を作成することで Babel を利用できる
next/amp
https://nextjs.org/docs/advanced-features/amp-support/introduction
- https://nextjs.org/docs/api-reference/next.config.js/redirects
- https://nextjs.org/docs/api-reference/next.config.js/rewrites
- pages で LP、フォーム部分など動的な部分を作成する
- api/form.ts のような形でフォームの受口を作る
- API の内部でフォームを別なサーバーへポストするなり必要な処理をする
- CORS 回避の必要があれば api か getServerSideProps を利用する