この解答例はChatGPTによって生成されています,正しいかは自己判断で。
BFE.devでのAI解答例 - React コーディング問題
15. useClickOutside()
以下は、要素の外側がクリックされたときにコールバックを呼び出す useClickOutside()
フックの実装例です。
import { useEffect, useRef } from 'react';
function useClickOutside(callback) {
const ref = useRef();
useEffect(() => {
const handleClickOutside = event => {
if (ref.current && !ref.current.contains(event.target)) {
callback();
}
};
document.addEventListener('mousedown', handleClickOutside);
return () => {
document.removeEventListener('mousedown', handleClickOutside);
};
}, [callback]);
return ref;
}
export default useClickOutside;
このフックは、 useRef()
フックを使用して、 ref
変数を作成し、コンポーネント内で使用している DOM 要素に割り当てます。 useEffect()
フックを使用して、 document
オブジェクト上の mousedown
イベントをリッスンします。 ハンドラー関数では、クリックされた要素が参照している要素の外側にある場合にのみ、コールバック関数を呼び出します。 リッスンしているイベントを削除するために、 cleanup 関数を返します。最後に、 ref
変数を返します。
つまり、 useClickOutside()
フックは、コンポーネントで参照されている DOM 要素のクリック外側(例えば、ドロップダウンメニューの場合はメニューの外側)がクリックされたときに、渡されたコールバック関数を呼び出すことができます。