javascript - nextjs如何监听页面变化

标签 javascript reactjs react-hooks next.js next-router

我想重用我在 react-router-dom 中制作的菜单,但这次是在 nextjs 中。目标是当我单击菜单内的链接时,将菜单的状态更改为“false”,将 menuName 更改为“menu”。
我使用 useEffect 函数来收听历史记录:

//use effect for page changes
  useEffect(() => {
    //listen for page changes
    history.listen(() => {
      setState({ clicked: false, menuName: "Menu" })
    })
  })
并用 withRouter 包装了我的组件:
import { withRouter } from 'next/router'
[...]
export default withRouter(Header);
不幸的是,它打印:
TypeError: Cannot read property 'listen' of undefined
我应该更好地使用'useRouter'来解决这个问题吗?如何?
谢谢 ;)

最佳答案

它是这样工作的:
Nextjs : Router Events

import { useRouter } from "next/router";

...

const router = useRouter()
  useEffect(() => {
    const handleRouteChange = (url) => {
      console.log(
        `App is changing to ${url}`
      )
      setState({ clicked: false, menuName: "Menu" })
    }

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

    // If the component is unmounted, unsubscribe
    // from the event with the `off` method:
    return () => {
      router.events.off('routeChangeStart', handleRouteChange)
    }
  }, [])

关于javascript - nextjs如何监听页面变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65884505/

相关文章:

javascript - 用于加载异步请求的附加类

javascript - React Hook "useEffect"有条件地被调用

reactjs - React Custom Hook with Typescript Type error "Property ' x' 在类型 'interface | (({ target }: any) => void)' .ts(2339) 上不存在"

javascript - PHP 和 Ajax : using post ajax return error

javascript - 如何删除可拖动 HTML 元素中的背景颜色?

javascript - ASP.NET 下拉列表在服务器button_click 中为空,ddl 已在客户端填充

reactjs - 将数据插入空数组 - React useState() Hook

Javascript 忽略 document.write 中的标签

JavaScript Map.get(variableName) 返回未定义

reactjs - React Native : this. 可重用组件的状态不是预期的