如何在听 Next.js 中的路由器更改时更改状态?

问题描述

我想要完成的是在更改路由器时与 github 上的这个 React 应用程序完全相同的打开和关闭菜单动画,但是使用 Next.js(几乎是相同的代码

这是我的应用程序 repo on github,这里是 app live

我正在尝试关注 Next.js documentation,但 menuOpened 的状态似乎没有更新。

import Link from 'next/link'
import React,{ useEffect,useState } from 'react'
import { withRouter,useRouter } from 'next/router'
import { UpArrowCircle } from '@/components/SvgFiles'
import { openMenu,closeMenu } from '@/components/MenuAnimations'

const Header = ({ dimensions }) => {
  const [menuState,setMenuState] = useState({ menuOpened: false })
  const router = useRouter()

  useEffect(() => {
    const handleRouteChange = (url) => {
      // console.log(`App is changing to ${url}`)
      setMenuState({ menuOpened: false })
    }

    if (menuState.menuOpened === true) {
      openMenu(dimensions.width)
    } else if (menuState.menuOpened === false) {
      closeMenu()
    }

    router.events.on('routeChangeStart',handleRouteChange)

    return () => {
      router.events.off('routeChangeStart',handleRouteChange)
    }
  })

   return (
    <header className="header">
      <div className="container">
        <div className="row v-center space-between">
          <div className="logo">
            <Link href="/">
              <a>AGENCY</a>
            </Link>
          </div>
          <div className="nav-toggle">
            <div
              onClick={() => setMenuState({ menuOpened: true })}
              className="hamburger-menu"
            >
              <span></span>
              <span></span>
            </div>
            <div
              className="hamburger-menu-close"
              onClick={() => setMenuState({ menuOpened: false })}
            >
              <UpArrowCircle />
            </div>
          </div>
        </div>
      </div>
    </header>
  )
}
export default withRouter(Header)

欢迎任何帮助! 干杯!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)