以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - React 代码题
15. useClickOutside()

题目要求实现一个名为useClickOutside()的React Hook,用于在点击元素外面时执行回调函数,实现类似页面头部菜单的下拉框点击外部关闭的效果。

以下是实现示例代码:

import { useEffect, useRef } from 'react';

function useClickOutside(handler) {
  const ref = useRef();

  useEffect(() => {
    function handleClickOutside(event) {
      if (ref.current && !ref.current.contains(event.target)) {
        handler();
      }
    }

    document.addEventListener('mousedown', handleClickOutside);

    return () => {
      document.removeEventListener('mousedown', handleClickOutside);
    };
  }, [handler]);

  return ref;
}

export default useClickOutside;

useClickOutside() Hook中,我们首先使用useRef()提供的引用来创建一个对DOM节点或React组件的引用。然后我们在组件上使用这个引用,并在useEffect的回调函数中添加了一个mousedown事件监听器。在回调函数内部,我们通过contains()函数来检查鼠标单击事发生在引用元素之外还是之内。如果鼠标单击在元素之外,我们触发传入回调函数。最后,我们返回创建的引用,以便应用程序可以直接将其应用于需要调用此功能的React组件。