この解答例は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 要素のクリック外側(例えば、ドロップダウンメニューの場合はメニューの外側)がクリックされたときに、渡されたコールバック関数を呼び出すことができます。