react-router+antD/ How to highlight a menu item when press back/forward button?

后端 未结 6 2245
[愿得一人]
[愿得一人] 2021-02-12 17:54

I create a menu and want to highlight the item which i choose,and i did it. But when i press back/forward button,the menu item don\'t highlight. What should i do?

I ha

6条回答
  •  广开言路
    2021-02-12 18:22

    The following answer assumes you are using hooks. I know you are not in your question, but it might be useful for other people. In addition, this solution will work if you have nested paths such as /banner/this/is/nested, and it works not only when pressing back and forward buttons but also when refreshing the current page:

    import React, { useState, useEffect } from 'react'
    import { useHistory, useLocation } from 'react-router-dom'
    import { Layout, Menu } from 'antd'
    
    const { Sider } = Layout
    
    const items = [
      { key: '1', label: 'Invoices', path: '/admin/invoices' },
      { key: '2', label: 'Service Details', path: '/admin/service-details' },
      { key: '3', label: 'Service Contract Details', path: '/admin/service-contract-details' },
      { key: '4', label: 'Cost Centers', path: '/admin/cost-centers' },
      { key: '5', label: 'Clients', path: '/admin/clients' },
      { key: '6', label: 'Vendors', path: '/admin/vendors' }
    ]
    
    const Sidebar = () => {
      const location = useLocation()
      const history = useHistory()
      const [selectedKey, setSelectedKey] = useState(items.find(_item => location.pathname.startsWith(_item.path)).key)
    
      const onClickMenu = (item) => {
        const clicked = items.find(_item => _item.key === item.key)
        history.push(clicked.path)
      }
    
      useEffect(() => {
        setSelectedKey(items.find(_item => location.pathname.startsWith(_item.path)).key)
      }, [location])
    
      return (
        
          

    Costek

    {items.map((item) => ( {item.label} ))}
    ) } export default Sidebar

    This is how the sidebar will look like:

提交回复
热议问题