React useEffect 禁止 は何をしますか?
直接の useEffect は外部同期のためのエスケープハッチです。それはレビュー済みの、実際の外部システム用のドメイン固有フックの中に置かれ、コンポーネントはエフェクトフリーに保たれます。
スコープ
エフェクトの置き換えは、影響を受ける動作を変更します。リポジトリ全体へのリント強制は別のタスクです。これは要求された場合、または既存のリポジトリポリシーで必要な場合に適用します。レビューリクエストは調査結果を生成します。実装リクエストは、別の承認チェックポイントなしで、スコープ内の置き換えと検証を許可します。
ワークフロー
-
影響を受ける表面で、直接インポート、
React.useEffect(...)名前空間呼び出し、およびuseEffectのラッパーを見つけます。 -
各エフェクトを分類し、以下の優先順位で置き換えます:
- レンダリング時計算
- サーバー、ローダー、またはフレームワークデータAPI
- リポジトリのサーバー状態レイヤー(例:キーに変数を持ち、
signalを渡す TanStack Query のqueryOptionsファクトリ) - イベントハンドラ、アクション、またはミューテーション
- キー付きコンポーネントバウンダリ
useSyncExternalStore- 実際の外部システム用のレビュー済みドメイン固有フック
どれも合わない場合は、エフェクトを保持する前に外部同期契約を明記します。置き換え で、自明でないケースを扱います。
-
リポジトリのフレームワーク、データレイヤー、リント形状、および依存関係ポリシーを維持します。ライブラリの追加は、リクエストまたはリポジトリポリシーによって承認された場合のみ行います。サーバー状態レイヤーがない場合は、残りのエフェクトを設計上のギャップとして扱います。
-
リント、型、テストのゲートと、変更された動作に対する最小の実際のUIまたはフックチェックを実行します。
正当なエフェクト
すべての正当なエフェクトは、その外部システム(チャット接続、マップSDK、ウィジェット)にちなんだ名前のフックに、独自のファイルに配置します。フックはセットアップとクリーンアップを所有し、リアクティブな入力をパラメータとして受け取り、セットアップまたはクリーンアップが読み取るすべての値をリストするため、react-hooks/exhaustive-deps が抑制なしでパスします。既存のリポジトリフックを優先します。
フックは1つの外部システムに固有です。コールバックと呼び出し元提供の依存配列を受け取る汎用ラッパー(useUpdateEffect(fn, deps)、useMountEffect(fn))は、別名の直接エフェクトであり、サーバー状態、プロパティコピー、ユーザーアクション、キー付きリセットにはそれぞれ上記の独自の置き換えがあります。
強制
強制がスコープ内にある場合、リポジトリの既存のリンターを拡張して、名前付き useEffect インポートと React.useEffect(...) 呼び出しの両方を拒否します。src/hooks/** のようなディレクトリではなく、名前付きのレビュー済み統合フックファイルのみを許可します。汎用ラッパーとその呼び出し元を移行すべき違反として報告します。同じリント表面を、標準のローカルゲートとCIで、固定されたツールバージョンを使用して実行します。
レビューでは、新しい直接エフェクトは、変更が正当な外部システム境界を文書化および証明しない限り、すべて調査結果として扱います。依存配列の調整ではなく、置き換えを要求します。
境界
- 移行範囲は影響を受ける、または要求された表面に限定します。
useLayoutEffect、useInsertionEffect、フレームワークライフサイクルAPI、および非Reactエフェクトシステムは、要求がない限り、リントルールも含めてそのままにします。- パフォーマンスプリミティブは、測定された動作または確立されたリポジトリパターンに対してのみ適用します。
- 上流の帰属:上流。