Reactの公式ドキュメントには次のように書かれています -
React クラスのライフサイクル メソッドに精通している場合は、useEffect フックを、componentDidMount、componentDidUpdate、および componentWillUnmount を組み合わせたものと考えることができます。
componentWillMount()
私の質問は、フックでライフサイクル メソッドをどのように使用できるかということです。
ベストアンサー1
既存のライフサイクル メソッド ( componentDidMount
、componentDidUpdate
などcomponentWillUnmount
) はフックでは使用できません。これらはクラス コンポーネントでのみ使用できます。また、フックでは関数コンポーネントでのみ使用できます。以下の行は React ドキュメントからの引用です。
useEffect
React クラスのライフサイクル メソッドに精通している場合は、 Hook を 、 、 を組み合わせたものとcomponentDidMount
考えるcomponentDidUpdate
ことができますcomponentWillUnmount
。
提案としては、関数コンポーネント内のクラスコンポーネントからこれらのライフサイクルメソッドを模倣することができます。
内部のコードはcomponentDidMount
コンポーネントがマウントされたときに一度実行されます。useEffect
この動作に相当するフックは
useEffect(() => {
// Your code here
}, []);
ここで 2 番目のパラメータ (空の配列) に注意してください。これは 1 回だけ実行されます。
2 番目のパラメータがないと、useEffect
コンポーネントのレンダリングごとにフックが呼び出されるため、危険な場合があります。
useEffect(() => {
// Your code here
});
componentWillUnmount
クリーンアップに使用されます (イベント リスナーの削除、タイマーのキャンセルなど)。次のように、イベント リスナーを追加しcomponentDidMount
て削除するとします。componentWillUnmount
componentDidMount() {
window.addEventListener('mousemove', () => {})
}
componentWillUnmount() {
window.removeEventListener('mousemove', () => {})
}
上記のコードに相当するフックは次のようになります。
useEffect(() => {
window.addEventListener('mousemove', () => {});
// returned function will be called on component unmount
return () => {
window.removeEventListener('mousemove', () => {})
}
}, [])