mcpField
R
react-useeffect-avoid

react-useeffect-avoid

github.com/flpbalada開発28138 回インストール13 週間前に更新
リポジトリ

react-useeffect-avoid について

`useEffect`を避ける場面と代替パターンを説明するReact開発スキルです。外部システムとの同期と、通常のアプリケーションロジックを区別します。

主な機能

  1. 01`useEffect`の判断ツリー
  2. 02派生状態とイベントの代替案
  3. 03外部システムのエフェクトに関する指針
  4. 04React 19のリソース読み取り例

活用シーン

  1. 01派生状態に使われているエフェクトの確認
  2. 02ユーザー操作に適したイベントハンドラーの選択
  3. 03連携処理にエフェクトが必要かの判断

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/flpbalada/my-opencode-config --skill react-useeffect-avoid

インストール後、Claude Code で/react-useeffect-avoidを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

context/
anti-patterns.md
decision-tree.md
patterns-to-avoid.md

詳細

React:useEffect を使わないほうがよい場合

基本原則

useEffect は外部システムとの同期に使うためのエスケープハッチであり、状態管理やイベント処理に使う汎用ツールではありません。

モダンな React のパターンでは、エフェクトによる同期よりも一方向のデータフローとイベント駆動の更新を重視し、パフォーマンスの低下や複雑な同期バグを避けます。

判断フローチャート

Need to sync with external system?
├─ Yes (browser APIs, websockets, timers)
│  └─ Use useEffect
│
└─ No (pure React application logic)
   ├─ Derived state calculation?
   │  ├─ Yes → Calculate during render
   │  └─ No → Continue...
   │
   ├─ User action triggered?
   │  ├─ Yes → Use event handler
   │  └─ No → Continue...
   │
   ├─ State reset needed?
   │  ├─ Yes → Use key prop
   │  └─ No → Continue...
   │
   └─ Really need effect after re-think?
      └─ Yes → Use useState/useReducer/setState pattern

クイックリファレンス

❌ useEffect を使わないケース:
シナリオ問題代替手段
派生状態二重レンダリングレンダリング中に計算する
状態のリセット古いデータkey プロパティを使う
ユーザー操作意図が失われるイベントハンドラー
リストのフィルタリング余分なレンダリングレンダリング中にフィルタリングする
ブラウザー APIテアリングのバグ(並行処理時)useSyncExternalStore
フォーム送信壊れやすいフラグのパターン非同期ハンドラーを直接使う
データ取得キャッシュ管理を手動で行う必要があるReact Query、SWR、Suspense
✅ useEffect を使うケース:
  • 外部システム(WebSocket、ブラウザー API など)を購読する
  • クリーンアップ処理を伴うタイマーを設定する
  • サードパーティ製ライブラリとの統合を管理する
  • ドキュメントのタイトルを変更する
  • レンダリング完了時に分析データやテレメトリーを送信する

React 19:新しい代替手段

// React 19+ - Direct resource reading
function UserProfile({ userId }) {
  const user = use(fetchUser(userId)); // Reads promise directly
  return <div>{user.name}</div>;
}

段階的な詳細説明

トピックファイル使用するタイミング
例を交えたアンチパターンcontext/anti-patterns.mduseEffect の誤用に関する詳しいコード例
常に避けるべきパターンcontext/patterns-to-avoid.mdログ記録や DOM 操作などの一般的なアンチパターン
判断フローチャートと参考資料context/decision-tree.md素早く調べたい場合や、さらに詳しく知りたい場合

参考資料

コメント