◾️はじめに
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