カテゴリ: React 更新日: 2026/01/14

Reactで学ぶuseStateの型定義入門!オブジェクトと配列を型安全に管理する方法

useStateでオブジェクトや配列を型定義する方法
useStateでオブジェクトや配列を型定義する方法

先生と生徒の会話形式で理解しよう

生徒

「Reactでユーザー情報とか、リストみたいなデータもStateで持てるんですよね?」

先生

「はい。オブジェクトや配列もuseStateで管理できます。TypeScriptを使うと、その形まで安全に決められます。」

生徒

「形っていうのは、名前とか年齢とか、配列の中身のことですか?」

先生

「その通りです。箱の中に何が入るかを先に決めておくことで、間違いを防げます。まずはオブジェクトから見ていきましょう。」

1. Reactでオブジェクトや配列をStateにするとは?

1. Reactでオブジェクトや配列をStateにするとは?
1. Reactでオブジェクトや配列をStateにするとは?

ReactのuseStateは、文字や数字だけでなく、オブジェクト配列も管理できます。オブジェクトは「名前と年齢をひとまとめにする箱」、配列は「同じ形のデータが並んだ箱」と考えると分かりやすいです。

たとえば、ユーザー情報は「名前」「年齢」「メールアドレス」のように、複数の情報をまとめて扱います。このような場合にオブジェクトが向いています。一方、買い物リストやTodoリストのように、同じ形のデータがたくさん並ぶ場合は配列を使います。

TypeScriptでは、これらの形を型定義することで、「この箱にはこういうデータしか入らない」と決められます。これが型安全なState管理です。

2. useStateでオブジェクトを型定義する基本

2. useStateでオブジェクトを型定義する基本
2. useStateでオブジェクトを型定義する基本

まずはオブジェクトのStateです。オブジェクトは、いくつかの項目をまとめたデータです。TypeScriptでは、その形をtypeで定義することが多いです。


import React, { useState } from "react";

type User = {
  name: string;
  age: number;
};

function App() {
  const [user, setUser] = useState<User>({
    name: "たろう",
    age: 20
  });

  return (
    <div>
      <p>名前:{user.name}</p>
      <p>年齢:{user.age}</p>
    </div>
  );
}

export default App;
(画面に「名前:たろう」「年齢:20」と表示されます)

この例では、Userという型を作り、「nameは文字」「ageは数字」と決めています。useState<User>と書くことで、「このStateはUser型ですよ」と宣言しています。

もし年齢に文字を入れようとすると、TypeScriptがすぐにエラーを出してくれます。これにより、間違いに早く気づけます。

3. オブジェクトStateを更新するときの考え方

3. オブジェクトStateを更新するときの考え方
3. オブジェクトStateを更新するときの考え方

オブジェクトのStateを更新するときは、「一部だけを書き換える」ことがよくあります。その場合、元のオブジェクトをコピーしてから変更します。


<button onClick={() => setUser({ ...user, age: user.age + 1 })}>
  年齢を増やす
</button>
(ボタンを押すと、年齢の数字が1ずつ増えます)

ここで使っている「...」はスプレッド構文と呼ばれます。「今の中身を全部コピーして、必要なところだけ変える」という意味です。初心者の方は「コピーしてから修正する」と覚えておくと安心です。

4. useStateで配列を型定義する基本

4. useStateで配列を型定義する基本
4. useStateで配列を型定義する基本

次は配列です。配列は、同じ形のデータがいくつも並んだものです。Todoリストや商品一覧などでよく使われます。

TypeScriptでは、「この配列の中には何が入るか」を型で決めます。


import React, { useState } from "react";

type Todo = {
  id: number;
  title: string;
};

function App() {
  const [todos, setTodos] = useState<Todo[]>([]);

  return (
    <div>
      <button
        onClick={() =>
          setTodos([...todos, { id: 1, title: "買い物" }])
        }
      >
        追加
      </button>
      <p>件数:{todos.length}</p>
    </div>
  );
}

export default App;
(最初は件数0で、ボタンを押すと件数が増えます)

useState<Todo[]>と書くことで、「この配列にはTodo型のデータだけが入る」と決まります。配列の中身の形がそろうので、後から扱いやすくなります。

5. 空の配列やオブジェクトと型指定の重要性

5. 空の配列やオブジェクトと型指定の重要性
5. 空の配列やオブジェクトと型指定の重要性

初心者がよくつまずくのが、「最初は空の配列や空のオブジェクト」のStateです。型指定をしないと、TypeScriptが正しく判断できないことがあります。

たとえば空配列だけを書くと、「中身が何の配列か分からない」と判断されることがあります。そこで、useState<型[]>のように、先に型を決めておくことが大切です。

これは、空の箱に「この箱はリンゴ専用」とラベルを貼るようなものです。後から何を入れてもいい状態にしないことで、間違いを防げます。

6. オブジェクトと配列を組み合わせたState

6. オブジェクトと配列を組み合わせたState
6. オブジェクトと配列を組み合わせたState

実際のReactアプリでは、オブジェクトの中に配列が入ることもよくあります。たとえば「ユーザー情報」と「そのユーザーのTodo一覧」を一緒に持つ場合です。

TypeScriptでは、型を組み合わせることで、複雑なStateでも安全に管理できます。


type UserData = {
  name: string;
  todos: Todo[];
};

このように型を分けて考えると、Stateの設計が分かりやすくなります。ReactでのState管理は、「どんなデータを、どんな形で持つか」を考えることが大切です。

7. 初心者が意識したいポイント

7. 初心者が意識したいポイント
7. 初心者が意識したいポイント

useStateでオブジェクトや配列を型定義するときは、次の点を意識すると理解しやすくなります。

  • オブジェクトは「ひとまとまりの情報」
  • 配列は「同じ形の情報が並ぶもの」
  • 型定義は「箱の説明書」

ReactとTypeScriptを組み合わせることで、画面の見た目だけでなく、データの形まで安全に管理できます。最初は少し難しく感じても、慣れるととても心強い仕組みです。

8. useStateの型定義はReact開発の基礎力

8. useStateの型定義はReact開発の基礎力
8. useStateの型定義はReact開発の基礎力

useStateでオブジェクトや配列を正しく型定義できるようになると、Reactでできることが一気に広がります。ユーザー情報、一覧表示、入力フォームなど、ほとんどの画面で役立ちます。

型を決めることは、難しい作業ではなく、「この箱には何を入れたいか」を考えることです。React初心者の方は、まず小さなStateから型定義に慣れていくと、自然と理解が深まります。

カテゴリの一覧へ
新着記事
New1
React
Reactの条件分岐の使い方を完全ガイド!初心者でもわかるReactの条件分岐
New2
React
PropsとStateの違いを徹底解説!使い分けのポイントまとめ
New3
React
Reactのフォーム入力を再利用しよう!初心者でもわかるフィールドコンポーネント化の考え方
New4
React
Reactでできること一覧!初心者でもわかるWebアプリ・スマホアプリ・PWAの活用方法
人気記事
No.1
Java&Spring記事人気No1
React
Reactでキーボードイベントを活用する方法!onKeyDown, onKeyUp, onKeyPressを初心者向けに解説
No.2
Java&Spring記事人気No2
React
ReactのPresentational Componentを完全ガイド!初心者でもわかるStateを持たないコンポーネントの特徴
No.3
Java&Spring記事人気No3
React
ViteでReact開発環境を構築する手順を完全ガイド!初心者でもできるReactの環境構築
No.4
Java&Spring記事人気No4
React
Reactでフォーカスイベントを制御する方法!onFocusとonBlurを初心者向けに解説
No.5
Java&Spring記事人気No5
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.6
Java&Spring記事人気No6
Next.js
Next.js Server Componentsのメリット・デメリットを完全解説!初心者でもわかるNext.jsの基本
No.7
Java&Spring記事人気No7
React
Reactのカードコンポーネントを汎用的に設計する方法!初心者でもわかる再利用の考え方
No.8
Java&Spring記事人気No8
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!