From d285f37eeb9734ab353a0f13c862cc4f8efd4dd7 Mon Sep 17 00:00:00 2001 From: Ou Date: Mon, 21 Oct 2024 15:23:51 +0800 Subject: [PATCH] feat: use hover to open dropdown-menu --- src/components/header/menu.tsx | 81 ++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/src/components/header/menu.tsx b/src/components/header/menu.tsx index cd706ec..a6c8a3f 100644 --- a/src/components/header/menu.tsx +++ b/src/components/header/menu.tsx @@ -1,8 +1,8 @@ import { Homepage } from "@shared/consts" import clsx from "clsx" import { motion } from "framer-motion" -import { useRef, useState } from "react" -import { useClickAway } from "react-use" +import { useEffect, useRef, useState } from "react" +import { useHoverDirty } from "react-use" import { useDark } from "~/hooks/useDark" import { useLogin } from "~/hooks/useLogin" @@ -21,13 +21,14 @@ function ThemeToggle() { export function Menu() { const { loggedIn, login, logout, enabledLogin, userInfo } = useLogin() const [shown, show] = useState(false) - const ref = useRef(null) - useClickAway(ref, () => { - show(false) - }) + const ref = useRef(null) + const isHover = useHoverDirty(ref) + useEffect(() => { + show(isHover) + }, [shown, isHover]) return ( - show(!shown)}> + { enabledLogin && loggedIn && userInfo.avatar ? ( @@ -46,39 +47,41 @@ export function Menu() { } {shown && ( - -
    - {enabledLogin && !loggedIn && ( -
  1. - - Github 账号登录 +
    + +
      + {enabledLogin && !loggedIn && ( +
    1. + + Github 账号登录 +
    2. + )} + {enabledLogin && loggedIn && ( +
    3. + + 退出登录 +
    4. + )} + +
    5. window.open(Homepage)}> + + Star on Github
    6. - )} - {enabledLogin && loggedIn && ( -
    7. - - 退出登录 -
    8. - )} - -
    9. window.open(Homepage)}> - - Star on Github -
    10. -
    -
    +
+
+ )}
)