この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿または 公式回答ページからも解答例が見つかるかもしれませんよ。

BFE.devでのAI解答例 - React コーディング問題
6. useHover()

以下が私たちの解決策です。

import { useState, useEffect, useRef } from 'react';function useHover() {  const [hovered, setHovered] = useState(false);  const ref = useRef(null);  function handleMouseOver() {    setHovered(true);  }  function handleMouseOut() {    setHovered(false);  }  useEffect(() => {    const node = ref.current;    node.addEventListener('mouseover', handleMouseOver);    node.addEventListener('mouseout', handleMouseOut);    return () => {      node.removeEventListener('mouseover', handleMouseOver);      node.removeEventListener('mouseout', handleMouseOut);    };  }, []);  return [ref, hovered];}function App() {  const [ref, isHovered] = useHover();  return (    <div ref={ref}>      {isHovered ? 'hovered' : 'not hovered'}    </div>  );}export default App;

この Hook は、配列に 2 つの要素を返します。第 1 要素は、コンポーネントに渡すために参照を保持する useRef フックであり、第 2 要素は、現在要素がホバーされているかどうかを示す真偽値です。

useEffect フックは、コンポーネントが最初にマウントされるときにのみ実行されます。 その後、ref.current.addEventListener メソッドを使用して、イベントリスナーが設定され、戻り関数でイベントリスナーが削除されるようにします。

このように、useHover フックはホバー状態を追跡し、それが原因で UI が変更される可能性がある場所で簡単に使用できます。