如何在点击React TypeScript外部时关闭下拉菜单?

huangapple go评论119阅读模式
英文:

How to close dropdown on click outside React TypeScript?

问题

我有一个下拉菜单,需要在单个页面的多个位置使用。

当我打开任何一个下拉菜单时,其他的下拉菜单应该关闭。我该如何解决这个问题?

我的代码:
Code Sandbox

英文:

I have a dropdown & I need to use this dropdown in multiple places in single page.

When I open any dropdown then rest of the dropdown should be close. How can I fix this issue ?

My code:
Code Sandbox

答案1

得分: 1

以下是您提供的代码的翻译部分:

  1. import React, { useState } from "react";
  2. const Dropdown = () => {
  3. const [actionIsOpen, setActionIsOpen] = useState<boolean>(false);
  4. const actionList = [
  5. { id: "1", name: "One" },
  6. { id: "2", name: "Two" },
  7. { id: "3", name: "Three" },
  8. { id: "4", name: "Four" }
  9. ];
  10. const handleActionClick = () => {
  11. setActionIsOpen((prev) => !prev);
  12. };
  13. return (
  14. <>
  15. <div className="tw-relative">
  16. <span onMouseDown={handleActionClick} className="tw-cursor-pointer">
  17. <button onBlur={() => setActionIsOpen(false)}>Dropdown Click</button>
  18. </span>
  19. {actionIsOpen && (
  20. <div className="shadow tw-w-48 tw-absolute tw-top-2 tw-z-50 tw-left-4 tw-bg-white tw-pt-2">
  21. {actionList.map((val: any) => (
  22. <div
  23. key={val.id}
  24. className="tw-bg-white-100 hover:tw-bg-violet-100 hover:tw-text-violet-900 tw-cursor-pointer hover:tw-font-bold py-2 px-3 tw-text-gray-600"
  25. onMouseDown={() => alert(val.name)}
  26. >
  27. {val.name}
  28. </div>
  29. ))}
  30. </div>
  31. )}
  32. </div>
  33. </>
  34. );
  35. };
  36. export default Dropdown;

希望这对您有所帮助!如果您需要进一步的帮助,请随时提出。

英文:
  1. import React, { useState } from &quot;react&quot;;
  2. const Dropdown = () =&gt; {
  3. const [actionIsOpen, setActionIsOpen] = useState&lt;boolean&gt;(false);
  4. const actionList = [
  5. { id: &quot;1&quot;, name: &quot;One&quot; },
  6. { id: &quot;2&quot;, name: &quot;Two&quot; },
  7. { id: &quot;3&quot;, name: &quot;Three&quot; },
  8. { id: &quot;4&quot;, name: &quot;Four&quot; }
  9. ];
  10. const handleActionClick = () =&gt; {
  11. setActionIsOpen((prev) =&gt; !prev);
  12. };
  13. return (
  14. &lt;&gt;
  15. &lt;div className=&quot;tw-relative&quot;&gt;
  16. &lt;span onMouseDown={handleActionClick} className=&quot;tw-cursor-pointer&quot;&gt;
  17. &lt;button onBlur={() =&gt; setActionIsOpen(false)}&gt;Dropdown Click&lt;/button&gt;
  18. &lt;/span&gt;
  19. {actionIsOpen &amp;&amp; (
  20. &lt;div className=&quot;shadow tw-w-48 tw-absolute tw-top-2 tw-z-50 tw-left-4 tw-bg-white tw-pt-2&quot;&gt;
  21. {actionList.map((val: any) =&gt; (
  22. &lt;div
  23. key={val.id}
  24. className=&quot;tw-bg-white-100 hover:tw-bg-violet-100 hover:tw-text-violet-900 tw-cursor-pointer hover:tw-font-bold py-2 px-3 tw-text-gray-600&quot;
  25. onMouseDown={() =&gt; alert(val.name)}
  26. &gt;
  27. {val.name}
  28. &lt;/div&gt;
  29. ))}
  30. &lt;/div&gt;
  31. )}
  32. &lt;/div&gt;
  33. &lt;/&gt;
  34. );
  35. };
  36. export default Dropdown;

Something like this ?

huangapple
  • 本文由 发表于 2023年7月6日 19:41:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/76628463.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定