Next.js と TypeScript で、分割代入を学ぶ

TwitterFacebookHatena

TL;DR

このページでは、JavaScript および TypeScript の分割代入について、その使用方法とそれが Next.js のコードにどのように適用されるかについて詳しく解説します。

開発環境 バージョン
Next.js 13.4.3
TypeScript 5.0.4
Emotion 11.11.0
React 18.2.0

分割代入とは?

分割代入(Destructuring assignment)は、配列やオブジェクトから特定の要素を取り出し、それらを個別の変数に割り当てるための JavaScript の機能です。これにより、一度に複数の変数を初期化したり、オブジェクトや配列から直接値を抽出したりできます。

基本的なソースコード

const user = {
  name: 'John Doe',
  age: 30,
}

const { name, age } = user

console.log(name) // John Doe
console.log(age) // 30

この例では、オブジェクトuserからnameageを取り出しています。分割代入を使用することで、user.nameuser.ageといった形でアクセスする必要がなくなり、より読みやすいコードになります。

Next.js で、分割代入を実装

分割代入は、Next.js と TypeScript のコードにおいて非常に有用です。以下に、具体的な使用例を挙げます。

ファイル名: components/UserProfile.tsx

type UserProps = {
  user: {
    name: string
    age: number
    email: string
  }
}

const UserProfile = ({ user }: UserProps) => {
  const { name, age, email } = user

  return (
    <div>
      <h1>{name}</h1>
      <p>Age: {age}</p>
      <p>Email: {email}</p>
    </div>
  )
}

export default UserProfile

ここでUserProfileコンポーネントはuserオブジェクトを受け取り、そのプロパティを分割代入を用いて個々の変数に割り当てます。これにより、各プロパティに簡単にアクセスすることができます。

分割代入のテクニカルな活用例

分割代入は、特定の情報を抽出するだけでなく、既存のオブジェクトや配列から新しいオブジェクトや配列を作成するのにも役立ちます。例えば、既存のオブジェクトから一部のプロパティを削除した新しいオブジェクトを作成することが可能です。

type UserProps = {
  user: {
    name: string
    age: number
    email: string
    password: string
  }
}

const UserProfile = ({ user }: UserProps) => {
  const { password, ...userWithoutPassword } = user

  return <div>{/* Render userWithoutPassword... */}</div>
}

export default UserProfile

ここでは、userオブジェクトからpasswordプロパティを除いた新しいオブジェクトuserWithoutPasswordを作成しています。このように分割代入は、データの変形やフィルタリングにも使える強力なツールですよね。

Emotion での分割代入の利用

JavaScript や TypeScript の分割代入は Emotion のスタイリングにも応用可能です。特にテーマングのコンテキストで有効に活用できます。次の例では、共通のテーマ設定から特定の色を抽出し、それをコンポーネントのスタイリングに適用しています。

/** @jsxImportSource @emotion/react */
import { css } from '@emotion/react'
import { useContext } from 'react'
import { ThemeContext } from '../contexts/ThemeContext'

type UserProps = {
  user: {
    name: string
    age: number
    email: string
  }
}

const UserProfile = ({ user }: UserProps) => {
  const { name, age, email } = user
  const { colors } = useContext(ThemeContext)
  const { primary, secondary } = colors

  return (
    <div
      css={css`
        color: ${primary};
        background: ${secondary};

        h1 {
          color: ${secondary};
        }
        p {
          color: ${primary};
        }
      `}
    >
      <h1>{name}</h1>
      <p>Age: {age}</p>
      <p>Email: {email}</p>
    </div>
  )
}

export default UserProfile

この例では、useContextフックを使ってテーマコンテキストを取得し、その中からcolorsを抽出します。その後、colorsからprimarysecondary色を分割代入し、それを Emotion のcss関数内でスタイリングに利用します。

このように、分割代入は Emotion を使用したスタイリングでも非常に役立つテクニックとなります。これを使えば、テーマカラーや共通のスタイル設定を簡単に取り出し、それを直感的にコンポーネントのスタイルに適用することができるんですよ。

Next.js と TypeScript で、分割代入を学ぶ