- 13 バージョンリリースにともなって、
create-next-app@latest --ts
のあとにapp/ Directory (beta)を試す
Node.js | 18.12.0 |
npm | 8.19.2 |
next | 13.0.0 |
react | 18.2.0 |
react-dom | 18.2.0 |
typescript | 4.8.4 |
- プロジェクト生成後、素の状態で動作確認 OK
-
app
ディレクトリにpage.tsx
を追加することで、pages/index.tsx
と同じ役割をする-
ただ、
next.config.js
に{experimental:{appDir: true}}
設定を追加する必要がある -
追加したら、以下の修正がかかる
-
app
配下にlayout.tsx
が追加されるRootLayout
という名前のコンポーネントが生成されるapp.tsx
や_document.tsx
の役割をする
-
tsconfig.json
に項目が追加される- include was updated to add '.next/types/**/*.ts' - plugins was updated to add { name: 'next' }
-
-
-
app
ディレクトリとpages
ディレクトリは共存できない.notUse
ディレクトリを設け、pages
を移す
app/page.tsx
内でapp/layout.tsx
をラップしなくても動作する- おそらく、13 バージョンからは
page.tsx
とlayout.tsx
がディレクトリ内でユニークな役割をすると思われる
- おそらく、13 バージョンからは
- ルーティングに関する変更
- url のパスはディレクトリ名で区切る
- url のパス名をディレクトリ名にすることで統一している
- url のパスとなるディレクトリには
page.tsx
を含める必要がある
- url のパスはディレクトリ名で区切る
- url のパス名をディレクトリの
page.tsx
から外部データを取得するコードを書くと想定する- next.js 13 より前は
getServerSideProps
とかgetStaticProps
を使うことで外部データを取得できた - しかし、next.js 13 で最新の react を使う場合、react の
use
関数を使うことで、より簡単に外部データの取得ができる - また、
use
でデータを取得した場合、console.log
を使ってログを出してもブラウザ側ではログの確認ができない- サーバー(開発時はターミナル)では確認できる
- 理由は、
app
配下のコンポーネントはデフォルトでサーバーコンポーネントとして動く - なので、
console.log
を書く場合、サーバー(開発時はターミナル)で確認する必要がある
- next.js 13 より前は
- ローディングインジゲータの表示
-
Suspense をラップするようなことをしなくても、
app/loading.tsx
を追加することで実装できる -
おそらく、13 バージョンからは **
app/loading.tsx
がローディングインジ
-
ゲータとしてユニークな役割をする**と思われる
- おそらく、next.js 13 の
app
ディレクトリと react の最新バージョンのuse
を組み合わせることで、自動的にデータ取得中はapp/loading.tsx
を参照するようにしてくれる
- ダイナミックルート
- ダイナミックルートとして参照するキー名をしたディレクトリを生成する
- ex)
app/posts/[id]
- ex)
- キー名のディレクトリ内には
page.tsx
を追加する
- ダイナミックルートとして参照するキー名をしたディレクトリを生成する
- url のパス名をディレクトリ配下にも
layout.tsx
を追加できる- 表示したいメインコンテンツは
page.tsx
に表示して、ページで共通する部分はlayout.tsx
に集約することができる - url のパス名をディレクトリ配下にダイナミックルートでディレクトリがあったとしても、メインコンテンツとしてはダイナミックルートのページを表示し、url のパス名をディレクトリで共通して見せたい部分は見せられる
- 表示したいメインコンテンツは
- コンポーネントとして分離したパーツは
app
配下においても、app
の外からでも参照できるapp/navBar.tsx
とcomponents/navBar.tsx
で動作の差はなかった