Open14

【個人メモ】Next.jsを初めて触ってみた

YSYS

https://nextjs.org/docs/getting-started
Getting Startedをやってみる。

YSYS

ページを作成する。

pagesディレクトリ以下にjsファイルを追加する。
pages/posts/first-post.js の様にすると /posts/first-post のパスでルーティングする。
https://nextjs.org/learn/basics/navigate-between-pages

下記の様にデフォルトexportする。

export default function FirstPost() {
  return <h1>First Post</h1>
}
YSYS

下記の様にインラインでスタイリングできる
https://nextjs.org/learn/basics/assets-metadata-css/css-styling

<style jsx>{`
      h1 {
          background-color: #cc66cc;
      }
`}</style>

グローバルスタイル

pages/_app.js を作成して、そこから参照するとグローバルにスタイル適用される。

import '../styles/global.css'

export default function App({ Component, pageProps }) {
  return <Component {...pageProps} />
}
YSYS

HEAD タグでタイトル等のメタ情報を定義できる。

import Head from 'next/head'

<Head>
  <title>ページのタイトル</title>
  <link rel="icon" href="/favicon.ico" />
</Head>
YSYS

アセット

https://nextjs.org/learn/basics/assets-metadata-css/assets

publicディレクトリ内にアセットを格納すると静的ファイルとしてアプリケーションのトップレベルに配置される。
例:プロジェクトのpublic/images/me.jpgに画像を格納すると、パスの/images/me.jpgで公開される。

YSYS

TypeScriptのサポート

https://nextjs.org/docs/basic-features/typescript

空の tsconfig.json をルートディレクトリに配置する。
独自のコンパイルオプションがサポートされている。
依存パッケージをインストールする。

yarn add --dev typescript @types/react @types/node

これで .tsx で実装できる。

YSYS

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: [],
}

https://tailwindcss.com/docs/guides/nextjs

YSYS

その他の便利な機能

YSYS

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>
  )
}
YSYS

絶対パス、エイリアス

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 />
    </>
  )
}

https://nextjs.org/docs/advanced-features/module-path-aliases