プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Next.js
  • 【Next.js】Next.jsの基本コンポーネント、ページ遷移、ページのテスト
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Next.js】Next.jsの基本コンポーネント、ページ遷移、ページのテスト

05.16

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

基本コンポーネント

Head

1
import Head from 'next/head';

以下のように使います。タイトルが表示されます。

1
2
3
<Head>
  <title>タイトル</title>
</Head>

App Router環境

Headはmetadataに置き換わっています。

Link

ページ遷移を実現できるコンポーネントです。prefetchと呼ばれる仕組みを用いて事前にリンク先のページ情報を取得しておくことによりページ遷移を高速化できるコンポーネントです。

1
import Link from "next/link";

以下のように使います。

1
2
3
4
5
<Link href="/">
  <a className="link">
    Home
  </a>
</Link>

Image

画像の圧縮を最適化してくれるコンポーネントです。表示したいサイズに自動でリサイズした上での配信や遅延読み込みを実現できるためWebページのパフォーマンスが向上します。

1
import Image from "next/image";

以下のように使います。

1
2
3
4
5
6
<Image
  src="/image.jpg"
  width={60}
  height={60}
  alt="image"
/>

ちなみに、毎回違う画像を生成するとすぐVercelの枚数の上限に達するので注意すること。(Proでも上限3000枚になっている。)

Next.jsのpublicフォルダにローカル画像はNext.jsが最適化を行ってくれますが、別のCDNも指定は可能です。その場合は、loarderプロパティを使います。以下対応しているCDNごとの埋め込み方法が記載されています。ちなみに、cloudfrontは対応していなさそうなので最適化は行えない。(なので、Vercelをデプロイ先を指定しない限りは特に最適化を行う必要もない。)

https://nextjs.org/docs/app/api-reference/next-config-js/images#example-loader-configuration

→もし、導入しないなら別途lazyloadは検討する必要がある。

キャッシュ

ローカル画像→ハッシュ値が付与されて画像を差し替えた場合でも更新してくれる。

CDNなどのリモート画像→ハッシュ値を計算できないので、cacheの時間を短めに設定することが推奨されているが、基本的に静的コンテンツは長めにした方が良いだろう。

ページ遷移方法

リンク形式でページ遷移をさせたい場合

NextJsのLinkコンポーネントを使う。

ページ遷移を実現できるコンポーネントです。

1
import Link from "next/link";

以下のように使います。

1
2
3
4
5
<Link href="/">
  <a className="link">
    Home
  </a>
</Link>

関数の中からページ遷移をさせたい場合

userRouterを使います。

1
2
3
4
5
6
7
import { useRouter } from 'next/router';
 
  const router = useRouter();
 
const kansu = () => {
  router.push('/遷移先URL');
}

App Router環境

「next/router」は「next/navigation」に置き換わっています。

pageのテスト

インストール

Next.jsのpageのコンポーネントは普通のReactに比べて少し特殊なので、テストするには「next-page-tester」というパッケージをインストールしておきます。

1
npm i next-page-tester

実装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { getPage, initTestHelpers } from 'next-page-tester'
 
initTestHelpers()
 
describe('テストコード', () => {
  it('テストケース1', async () => {
    const { page } = await getPage({
      route: '取得したいページのパス',
    })
    render(page)
 
    userEvent.click(screen.getByTestId('xxx'))
    expect(await screen.findByText('yyy')).toBeInTheDocument()
  }
}

initTestHelpers

ページヘルパーの初期化です。

テストケース

「next-page-tester」を使用する場合は、ページの取得が非同期処理になるので関数をasyncにしておく必要があります。

スポンサーリンク
  • 2021 05.16
  • miyabisan2
  • コメントを書く
  • Next.js
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 05.16

    【Next.js】「CSR(UseSWR)」について

  2. 2021 08.13

    【Next.js】「CSR」、「SSR」、「SSG」の違い

  3. 2021 05.09

    【Next.js】「getStaticProps」、「Dynamic routes」について

  4. 2021 05.08

    【Next.js】基本、バージョン、導入方法、Vercelとは?

  5. 2022 01.17

    【Next.js】ディレクトリ構成、「.next」ディレクトリ、「_app.tsx」と「_document.tsx」、APIルート機能など

  6. 2023 08.30

    【フロントエンド】2023年9月現在の技術選定

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Next.js】「getStaticProps」、「…

【Next.js】「CSR(UseSWR)」について

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー