このチャプターの目次
さて、セットアップしたところまでではちょっとCRAとの違いが見えてきません。
ここから少しだけNext.jsの魅力がわかる機能を含めながら紹介してみましょう
複数ページ
検証をする際、複数パターンやルーティングを使う部分を試したいことはよくあります。
Create React Appの場合、ルーティングのためにreact-router
の設定をする必要がありますが、Next.jsではpages
ディレクトリにファイルを増やせば自動的にルーティングしてくれます。
コード例
$ touch pages/my_new_page.tsx
// pages/my_new_page.tsx
export default function MyNewPage() {
return (
<div>
Hello My New Page!
</div>
)
}
// => http://localhost:3000/my_new_pages でアクセス可能に
もちろんディレクトリも考慮されます
$ touch pages/some_dir/dir_page.tsx
この場合は下記のURLでアクセス出来るようになります。
http://localhost:3000/some_dir/dir_page
Tips. 動的ルーティング
また、日々の練習レベルでは使う機会は少ないかもしれませんが、動的ルーティングにも対応しているので、下記のようなことも可能です
$ touch pages/greeting/[name].tsx
[name].tsx
というファイル名は少し気持ち悪さもありますが、深く考えずに慣れてしまうほうが幸せになれるでしょう。
これで下記にアクセスできるようになります
http://localhost:3000/greeting/foo
この場合、パラメータはuseRouterを使うかgetServerSidePropsで取得できます
基本的にはuseRouter
を利用するのがお手軽です。
import { useRouter } from 'next/router'
export default function GreetingPage() {
const router = useRouter()
const { name } = router.query
return (
<div>
Hello {name}
</div>
)
}
// => http://localhost:3000/messages/foobaz とすれば「Hello foobaz」と表示される
しかしuseRouter
だとクライアント側で処理するために、レンダリング時のチラつきが気になるかもしれません。
その場合はgetServerSideProps
を利用しましょう
import { useRouter } from 'next/router'
export const getServerSideProps = ({ query }) => {
return {
props: { name: query.name }
}
}
export default function GreetingPage({ name }) {
return (
<div>
Hello {name}
</div>
)
}