在 React 中,你可以使用 useStateuseEffect 钩子来实现 Dropdown 组件的展示和关闭逻辑。

首先,你可以使用 useState 来跟踪 Dropdown 组件是否处于展示状态。在组件的初始状态下,设置 isDropdownOpenfalse

import React, { useState } from 'react';

const Dropdown = () => {
  const [isDropdownOpen, setIsDropdownOpen] = useState(false);

  return (
    // Dropdown 的内容
  );
};

接下来,你可以使用 useEffect 来监听页面的点击事件,并在 Dropdown 外部点击时关闭 Dropdown。为了确保 useEffect 只在组件挂载和 isDropdownOpen 发生改变时运行,你可以传递一个空数组作为第二个参数。

import React, { useState, useEffect, useRef } from 'react';

const Dropdown = () => {
  const [isDropdownOpen, setIsDropdownOpen] = useState(false);
  const dropdownRef = useRef(null);

  useEffect(() => {
    const handleOutsideClick = (event) => {
      if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
        setIsDropdownOpen(false);
      }
    };

    document.addEventListener('click', handleOutsideClick);

    return () => {
      document.removeEventListener('click', handleOutsideClick);
    };
  }, [isDropdownOpen]);

  return (
    <div ref={dropdownRef}>
      {/* Dropdown 的内容 */}
    </div>
  );
};

在这个例子中,我们使用了 useRef 来创建一个 dropdownRef 引用,它将被用来判断点击事件是否发生在 Dropdown 外部。

然后,我们定义了一个名为 handleOutsideClick 的函数,它在点击事件发生时检查点击的目标元素是否在 Dropdown 内部。如果不是,则关闭 Dropdown。

最后,我们在 useEffect 中添加了事件监听器,监听整个文档的点击事件。在组件卸载时,我们使用 return 语句从 useEffect 中清除事件监听器。

现在,当 Dropdown 组件展示时,它将监听整个文档的点击事件。如果点击事件发生在 Dropdown 外部,Dropdown 将关闭。

你可以根据自己的需求,将上述代码添加到你的项目中,并根据实际情况进行调整

reactjs 如何在展示 dropdown 的时候主动获取到 focus在dropdown失去focus的时候自动关闭

原文地址: https://www.cveoy.top/t/topic/iF6P 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录