React フックは、機能コンポーネントで状態やその他の React 機能を使用できるようにする強力な機能です。ただし、フックが適切かつ一貫して機能することを保証するには、フックを使用するときに従う必要がある特定のルールがあります。これらのルールは、React が最適化された予測可能な方法でフックの状態、効果、その他の機能を管理するのに役立ちます。
フックのルールは次のとおりです:
悪い例:
if (someCondition) { useState(0); // Bad: Hook inside condition }
良い例:
const [count, setCount] = useState(0); // Always called at the top level
悪い例:
function regularFunction() { useState(0); // Bad: Hook used outside a React component }
良い例:
const MyComponent = () => { const [count, setCount] = useState(0); // Good: Inside a functional component };
悪い例:
function fetchData() { // Bad: Not prefixed with "use" // Custom hook logic }
良い例:
function useFetchData() { // Good: Prefixed with "use" // Custom hook logic }
フック呼び出しの順序: フックは呼び出される順序に依存します。 React は、どのフックがどの状態またはエフェクトに対応するかを内部的に追跡するため、条件付きまたはループ内でフックを呼び出すと、レンダリング間でフックの順序が変わる可能性があります。これにより、予期しない動作やバグが発生します。トップレベルでフックを呼び出すことで、React は常に一貫した方法でフックを追跡できます。
レンダリング全体の一貫性: React は、コンポーネントが再レンダリングされるたびに同じ順序で呼び出されるフックに依存します。異なるレンダリング中にフックが異なる順序で呼び出される場合、React は状態とエフェクトを正しく適用する方法を認識できません。
フック呼び出しの不一致の回避: React 以外の関数または条件ブロックでフックを呼び出すと、React はどの状態がどのフックに対応するかを認識できないため、不一致やエラーが発生します。
例:
if (someCondition) { useState(0); // Bad: Hook inside condition }
例:
const [count, setCount] = useState(0); // Always called at the top level
悪い例:
function regularFunction() { useState(0); // Bad: Hook used outside a React component }
良い例:
const MyComponent = () => { const [count, setCount] = useState(0); // Good: Inside a functional component };
例:
function fetchData() { // Bad: Not prefixed with "use" // Custom hook logic }
条件付きフックの呼び出し: 条件またはループ内でフックを呼び出したくなるかもしれませんが、これはフックを常に同じ順序で呼び出す必要があるというルールに違反します。代わりに、常に同じ順序でフックを呼び出すようにコードを再構築することを検討してください。
React コンポーネントまたはカスタム フックの外部でのフックの使用: React フックは、機能コンポーネントまたはカスタム フックの内部でのみ使用できます。クラスコンポーネントまたは通常の関数内でフックを使用すると、エラーが発生します。
フックのルールは、React が一貫性のある予測可能な状態管理システムを維持できるようにする基本原則です。これらのルールに従うことで、React はコンポーネントが適切に動作し、状態が正しく管理され、副作用が期待どおりに実行されることを保証できます。常に覚えておいてください:
これらのガイドラインに従うことで、React アプリケーションのパフォーマンスが向上し、バグがないことが保証されます。
以上がReact におけるフックの基本的なルール: フックを適切に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。