8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Chakra UIを使いながらもNext.jsのLinkを使いたい!

Last updated at Posted at 2023-07-31

この記事でできること

Chakra UI の機能を使用しながら SPA(シングルページアプリケーション) を実現する。

解決したいこと

Next.js の Linkコンポーネント は、Chakra UIの機能を使うことができない

Next.jsでページを遷移するには、Next.jsで用意されているLinkコンポーネントを使用することが推奨されている。

この方法でページ遷移するとリロードが発生しない。(SPAが実現できている。)

しかし、Next.jsで用意されているLinkコンポーネントはChakra UIの機能を使用することができない。

解決策

@chakra-ui/next-jsパッケージ の Linkコンポーネント を使用する

Chakra UI の機能を使用しながらSPAを実現する方法として、Chakra UIが @chakra-ui/next-jsパッケージ の Linkコンポーネント を用意している。

このコンポーネントを使用することで、Next.jsとChakra UI、どちらの機能も使用することができる。

@chakra-ui/next-jsパッケージは、 Next.js 13 から使用可能

@chakra-ui/reactパッケージのLinkコンポーネントをインポートしないようにする。(リロードが発生してしまい、 SPAにならない 。)

使用方法

インポート文に以下のコードを追加する。

import { Link } from '@chakra-ui/next-js'

以下のように、JSX内で使用する。

<Link href="${ 遷移先のディレクトリ }">${ リンクを与えたいもの }</Link>

使用例

サンプルとして「page1/page.tsx」と「page2/page.tsx」を作成し、「page1」から「page2」へ遷移するリンクを作成する。

「page1/page.tsx」に以下のコードを記述する。

'use client'

import { Link } from '@chakra-ui/next-js'

export default function Home() {
  return (
    <Container centerContent py={8}>
        <Link href="/page2">page2へ</Link>
    </Container>
  )
}

上記のコードを追加すると、以下のような画面になる。
「page2へ」という文字をクリックすると、リロードせずに「page2」に遷移することが確認できる。
スクリーンショット 2023-06-14 175738.png

次にスタイルを設定していく。
先ほど作成したLinkコンポーネントを、以下のように修正する。

-<Link href="/page2"                                                        >page2へ</Link>
+<Link href="/page2" px={8} py={3} bg="teal.400" color="white" fontSize={24}>page2へ</Link>

Chakra UIの書き方でスタイルを設定できることが確認できる。
上記の例だと、以下のような画面になる。
スクリーンショット 2023-06-14 180423.png

参考サイト

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?