我被这个问题困扰了好几天,我在网上找到的解决方案没有任何帮助. 我的路由不能正常工作.URI正在更新,但未根据路径显示相应的页面. 当我刷新浏览器时,只有在那时,适当的页面才会出现.否则,即使路径更改,也只显示主页.

我会尽我最大的努力在这里用尽代码:

package.json

...
"history": "^5.3.0",
"node-sass": "^8.0.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.8.1",
...

AppRoutes.js

import { useRoutes } from 'react-router-dom';
...

const AppRoutes = () => {
    const routes = useRoutes([
        { path: PATH.home, element: <page.Home /> },
        { path: PATH.defect, element: <page.Defect /> },
        { path: PATH.other, element: <page.Other /> },
        { path: PATH.allRoutes, element: <page.Home /> }
    ]);

    return routes;
}

Navbar.js

...
import history from '../../utils/BrowserHistory';
...

/**
 * I am using semantic UI menu
 * Here I push the path for a browser route change
 */
handleItemClick = (e, { name }) => {
        this.setState({ activeItem: name });

        switch (name) {
            case APP_CONST.home:  
                history.push(PATH.home);
                break;
            case APP_CONST.defect:
                history.push(PATH.defect);
                break;
            case APP_CONST.other:
                history.push(PATH.other);
                break;
            default:
                history.push(PATH.home);
                break;
        }
    }
...

render() {
        const { activeItem } = this.state;

        return (
            <Fragment>
                {
                    this.state.width <= NUMBER.mobileScreenSize ?
                        <MobileNav
                            onToggle={this.handleToggle}
                            visible={this.state.visible}
                            onPusherClick={this.handlePusher}
                            item={activeItem}
                            handleItemClick={this.handleItemClick}
                        >
                            <NavBarChildren>{this.props.children}</NavBarChildren>
                        </MobileNav> :
                        <DesktopNav item={activeItem} handleItemClick={this.handleItemClick}>
                            <NavBarChildren>{this.props.children}</NavBarChildren>
                        </DesktopNav>
                }
            </Fragment>
        )
    }
}

const NavBarChildren = props => (
    <Container>{props.children}</Container>
);

DesktopNav.js

export const DesktopNav = props => {

    const { item, handleItemClick, children } = props;

    return (
        <React.Fragment>
            <Menu fixed='top' pointing secondary>
                <Menu.Menu>
                    <MenuItems item={item} handleItemClick={handleItemClick} />
                </Menu.Menu>
            </Menu>
            <div className='desktop-menu-items'>{children}</div>
        </React.Fragment>
    );
}

App.js

imports ...

function App() {
  return (
    <NavigationBar>
      <AppRoutes />
    </NavigationBar>
  )
}

index.js

...
import { BrowserRouter } from 'react-router-dom';
import history from './utils/BrowserHistory';
...

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    <BrowserRouter history={history}>
        <App />
    </BrowserRouter>
);

Please assist, thanks in advance...

推荐答案

BrowserRouter不消耗historyprops .BrowserRouter维护自己的内部history引用,因此不知道自定义history对象所做的URL更改.

如果您要从Navbar组件中的自定义history对象执行导航操作,而不是使用Link组件,那么您将需要使用可以接受自定义history对象的路由,以便它可以将其管理的路由与URL更改history对象效果同步.

您可以导入HistoryRouter,其中does使用historyprops .

示例:

...
import { unstable_HistoryRouter as HistoryRouter } from 'react-router-dom';
import history from './utils/BrowserHistory';
...

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <HistoryRouter history={history}>
    <App />
  </HistoryRouter>
);

Reactjs相关问答推荐

NextJS(AppRouter)、Apollo(客户端),在根布局中使用ApolloProvider时出错

Reaction Ploly:如何在多个子情节中共享zoom 状态

在React Create App TS项目中安装material UI

react 挂钩-使用有效澄清

点击页脚链接时,如何更改ReactJS导航栏中的活动菜单项(样式为Tailwind CSS)?

当我无法引用模态组件时,如何使模态组件在 Next.js/React 中管理自己的状态?

组件安装后调用自定义钩子

获取 不能显示为 的后代.错误,但不太确定如何构建我的代码以避免此警告

使用登录保护 React 中的 SPA 应用程序 - 为什么这种方法不起作用?

如何使用样式化函数为 TextField 的输入组件设置样式

在 React 中,为什么在使用 addEventListener 时外部元素上的 onclick 事件监听器在内部元素的 onclick 事件监听器之前执行?

如何处理页面加载时发生的 reactjs 错误?

使用 axios 响应路由 Dom 操作

如何使用 React 在客户端获取 nestjs websocket 异常错误?

在 Reactjs 中状态发生变化时渲染一个新组件而不替换旧组件

多次响应获取发送请求

调用函数以获取数据并在数据到达时导航到链接

useEffect 仅在跟随链接后有效,不适用于直接链接

如何从另一个切片中的不同切片获取状态并对其进行处理?

为什么我收到 Uncaught TypeError: Cannot read properties of null (reading 'add') on deployment?