0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Custom hookをつかって、肥大化したComponentをすっきりさせる。

Posted at

1. hook と普通の関数の違い

state や effect が必要な業務ロジックは hook にする。

普通の関数 hook
useState が使える
useEffect が使える
React の再レンダリングに連動
UI に依存 ❌(依存しない)
業務ロジック向き

2. hook は use-case とは違う?

hook は use-case を呼ぶ側
use-case は hook を知らない

観点 use-case hook
単位 1ユーザー操作 画面・フォームの振る舞い
検索・保存・登録 初期値セット・入力補助
React 依存 ❌ しない ✅ する
useState / useEffect
再利用単位 機能・業務 UI 単位
テスト Jest 単体 Jest(hook用)
呼び出し元 Page / hook Component
ボタン操作 あり なし

3. custom hook のポイント

  • UI(JSX)は一切含めない
  • react-hook-form を「使うが支配しない」
  • 状態・副作用・入力補助のみを持つ

4. 肥大化しすぎたコンポーネントをどうやって分解するか

ステップ0:まず「役割」を言語化する(最重要)

「1コンポーネント = 1責務」になるように「役割」を分割する。
(例)

  • Grid 状態管理

    • rowModesModel
    • rowModesRef / initialRowsRef
    • 編集可否
       
  • 業務保存処理

    • Auth 依存
    • 仮保存 / 確定 / 取消
    • 成功・失敗行の反映
       
  • UI 制御

    • loading オーバーレイ
    • Dialog(確認)
       
  • 表示構造

    • PageHeading / Layout
    • Grid の配置

ステップ 1: Hook にできない部分を固定する

以下は Hook にしません。

  • JSX レイアウト
  • PageHeading / Stack / Box
  • Dialog の JSX(※ state は切り出せる)

ステップ 2 : Grid → 保存 → UI の順で切り出す

なぜ Grid が最初か

  • UI に依存しない
  • 状態と副作用がまとまっている
  • 他画面再利用の可能性がある

「保存」処理は業務ルールが濃いので、テスト観点でも独立させたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?