【React】React Hooks ~ 入門編 ~

◾️はじめに

https://dk521123.hatenablog.com/entry/2025/10/24/215404

で、useStateを扱ったが、
それ以外にもuseEffectとかuseRefって使うようになっていて、
それらを総称して、React Hooksというらしいので、
これを機に徐々にまとめていく

目次

【0】React Hooks
【1】useState
【2】useEffect
【3】useRef
【4】useCallback
【5】useMemo

【0】React Hooks

* Hook(フック)は、React の機能の一部で
 状態管理(state)などのReactの機能を使うための、
 useで始まる特別なJavaScript関数

https://ja.react.dev/reference/react/hooks

【1】useState

* state 変数 を追加するための React フック

https://ja.react.dev/reference/react/useState

1)構文

stateの定義

// const [state, setState] = useState(initialState);
const [open, setOpen] = useState(false);
各パラメータ 説明 Memo
state State変数を定義
setState State変数を更新するための関数 setXxxxで定義するのが慣習
initialState Stateの初期値

stateの定義

// Case1: 値をそのまま格納するやり方
setState(2);

// Case2: 更新前の値 prev を参照するやり方
setState((prev) => prev + 1);

2)例

import React, { useState } from 'react'

const App = () => {
  // ★ useStateを使うだけで、クラスを定義せずにcountを管理
  const [count, setCount] = useState(0)

  return (
    <>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </>
  )
}

export default App

【2】useEffect

* レンダリングの後のイベントをハンドリングできる

https://ja.react.dev/reference/react/useEffect

役割

[1] コンポーネントのレンダリング後に処理を実行する
[2] コンポーネントがアンマウントされる際に実行する

1)構文

// useEffect(setup, dependencies?)
useEffect(() => {
  setErrorMessage(null); // const [errorMessage, setErrorMessage] = useState<string | null>(null);
}, [openDialog]);
// (1) [] の場合、最初の画面レンダリング時のみ、
// setErrorMessage(null);を実行
// (2) [openDialog] の場合、
// 最初の画面レンダリング時+openDialog変更時、setErrorMessage(null);を実行
各パラメータ 説明 Memo
setup ロジックが記述された関数 { setErrorMessage(null); }が当たる
dependencies [Optional] setup コード内で参照されるすべてのリアクティブな値のリスト [openDialog]が当たる

【3】useRef

* レンダー時には不要な値を参照するための React フック
 => Dirtyチェックなどに使える

https://ja.react.dev/reference/react/useRef

1)構文

const demoRef = useRef(initialValue)

// demoRef.current で値を参照できる

2)使用上の注意

* レンダー中に ref.current の値を読み取ったり書き込んだりしない
 => レンダー中に書き込みたい場合、useStateを使うべき

【4】useCallback

* 再レンダー間で関数定義をキャッシュできるようにする React フック
 => RadioButtonで変更したら値を保存する処理で使用

https://ja.react.dev/reference/react/useCallback

1)構文

useCallback(fn, dependencies)

2)サンプル

  const handleRowLimitChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {
    const newValue = event.target.value;

    setRowLimit(newValue);    
    SettingsManager.setRowLimit(Number(newValue));
  }, []);

【5】useMemo

* 関数の結果を保持するためのフック

https://ja.react.dev/reference/react/useMemo

1)構文

const cachedValue = useMemo(calculateValue, dependencies)

2)サンプル

https://dk521123.hatenablog.com/entry/2025/10/14/224514

  // true = ダークモード、false = ライトモード
  const [darkMode, setDarkMode] = React.useState(false);

  // MUI のテーマを作成
  const theme = React.useMemo(
    () =>
      createTheme({
        palette: {
          mode: darkMode ? 'dark' : 'light',
        },
      }),
    [darkMode]
  );

  return (
    <ThemeProvider theme={theme}>

関連記事

React ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/04/29/000000
React ~ props / state ~
https://dk521123.hatenablog.com/entry/2025/10/24/215404
React ~ JSX ~
https://dk521123.hatenablog.com/entry/2025/10/27/235319
React ~ Material UI / 入門編 ~
https://dk521123.hatenablog.com/entry/2025/10/14/224514
react-i18next ~ 多言語対応 ~
https://dk521123.hatenablog.com/entry/2025/10/13/230306
Vite 〜 入門編 〜
https://dk521123.hatenablog.com/entry/2025/10/08/004137
Web Storage 〜 入門編 〜
https://dk521123.hatenablog.com/entry/2015/12/18/003210
Web Storage 〜 基本編 〜
https://dk521123.hatenablog.com/entry/2015/12/20/163840