【個人メモ】Next.jsを初めて触ってみた
参考になりそうな記事を雑多に貼っていく。
Getting Startedをやってみる。
ページを作成する。
pages
ディレクトリ以下にjsファイルを追加する。
pages/posts/first-post.js
の様にすると /posts/first-post
のパスでルーティングする。
下記の様にデフォルトexportする。
export default function FirstPost() {
return <h1>First Post</h1>
}
Link Component
Read <Link href="/posts/first-post"><a>this page!</a></Link>
この様にリンクすると遷移する。
コード分割、プリフェッチがデフォルトで行われるらしい。
下記の様にインラインでスタイリングできる
<style jsx>{`
h1 {
background-color: #cc66cc;
}
`}</style>
グローバルスタイル
pages/_app.js
を作成して、そこから参照するとグローバルにスタイル適用される。
import '../styles/global.css'
export default function App({ Component, pageProps }) {
return <Component {...pageProps} />
}
HEAD
タグでタイトル等のメタ情報を定義できる。
import Head from 'next/head'
<Head>
<title>ページのタイトル</title>
<link rel="icon" href="/favicon.ico" />
</Head>
アセット
public
ディレクトリ内にアセットを格納すると静的ファイルとしてアプリケーションのトップレベルに配置される。
例:プロジェクトのpublic/images/me.jpg
に画像を格納すると、パスの/images/me.jpg
で公開される。
TypeScriptのサポート
空の tsconfig.json
をルートディレクトリに配置する。
独自のコンパイルオプションがサポートされている。
依存パッケージをインストールする。
yarn add --dev typescript @types/react @types/node
これで .tsx
で実装できる。
getStaticPropsについて
Tailwind cssを導入する
必要ライブラリをインストールする。
npm install tailwindcss@latest postcss@latest autoprefixer@latest
styles/globals.css
の先頭に下記のディレクティブを追加する。
@tailwind base;
@tailwind components;
@tailwind utilities;
コマンド npx tailwindcss init -p
を実行すると下記の様に tailwind.config.js
が作られる。
module.exports = {
purge: [],
darkMode: false, // or 'media' or 'class'
theme: {
extend: {},
},
variants: {
extend: {},
},
plugins: [],
}
VSCode によるインテリセンス導入
下記のアドオンをインストール
その他の便利な機能
Layout
components
フォルダをrootに作成して、 layout.js
ファイルを作成する。
export default function Layout({ children }) {
return <div>{children}</div>
}
pageコンポーネントでimportする。
import Layout from '../../components/layout'
export default function Home() {
return (
<Layout>
〜〜〜
</Layout>
)
}
絶対パス、エイリアス
tsconfig.json
または jsconfig.json
で下記の設定を追加する。
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/components/*": ["components/*"]
}
}
}
以下の様にインポートできる。
// components/button.js
export default function Button() {
return <button>Click me</button>
}
// pages/index.js
import Button from '@/components/button'
export default function HomePage() {
return (
<>
<h1>Hello World</h1>
<Button />
</>
)
}