首页 > 其他分享 >react router v6报错 useRoutes() may be used only in the context of a <Router> component.

react router v6报错 useRoutes() may be used only in the context of a <Router> component.

时间:2024-03-21 15:13:31浏览次数:31  
标签:used const App react 报错 context router import useRoutes

在使用react router v6版本的时候,按照之前的方法使用

src/main.tsx 是这样的,几乎不动

import * as React from "react";
import * as ReactDOM from "react-dom/client";
import "~/assets/index.css";

import App from "~/App.tsx";

ReactDOM.createRoot(document.getElementById("root")!).render(
    <React.StrictMode>
        <App />
     </React.StrictMode>,
 );

然后,路由

src/router/index.tsx

const router = [
    {
        path: "/",
        element: <div>Home</div>,
    },
    {
        path: "/about",
        element: <div>About</div>,
    },
];

export default router;

在APP组件 src/App.tsx 中使用路由

import "./assets/App.css";
import { Button, Divider, Flex } from "antd";
import { Link, useRoutes } from "react-router-dom";

import router from "~/router";

const App = () => {
    const route = useRoutes(router);
    return (
        <>
            <Flex gap="small" align="flex-start" vertical={false}>
                <Button type="primary">
                    <Link to="/">首页</Link>
                </Button>
                <Button type="primary">
                    <Link to="/about">关于</Link>
                </Button>
            </Flex>
            <Divider orientation="left">正文</Divider>
            <div>{route}</div>
        </>
    );
};

export default App;

此时,就会报错 Uncaught Error: useRoutes() may be used only in the context of a <Router> component.

查看文档,发现需要使用一个Router包一下

无论是 BrowserRouter 还是 HashRouter 亦或是其他什么 Router

然后我修改了下APP组件

import "./assets/App.css";
import { Button, Divider, Flex } from "antd";
import { BrowserRouter, Link, useRoutes } from "react-router-dom";

import router from "~/router";

const App = () => {
    const route = useRoutes(router);
    return (
        <BrowserRouter>
            <Flex gap="small" align="flex-start" vertical={false}>
                <Button type="primary">
                    <Link to="/">首页</Link>
                </Button>
                <Button type="primary">
                    <Link to="/about">关于</Link>
                </Button>
            </Flex>
            <Divider orientation="left">正文</Divider>
            <div>{route}</div>
        <BrowserRouter/>
    );
};

export default App;

但是问题还是没解决

最后发现,原来是要在最上层包

要修改 src/main.tsx 文件

import * as React from "react";
import * as ReactDOM from "react-dom/client";
import "~/assets/index.css";
import { BrowserRouter } from "react-router-dom";

import App from "~/App.tsx";

ReactDOM.createRoot(document.getElementById("root")!).render(
    <React.StrictMode>
        <BrowserRouter>
            <App />
        </BrowserRouter>
     </React.StrictMode>,
 );

然后后面的就不需要包了

所以APP组件就可以恢复成原来的样子

import "./assets/App.css";
import { Button, Divider, Flex } from "antd";
import { Link, useRoutes } from "react-router-dom";

import router from "~/router";

const App = () => {
    const route = useRoutes(router);
    return (
        <>
            <Flex gap="small" align="flex-start" vertical={false}>
                <Button type="primary">
                    <Link to="/">首页</Link>
                </Button>
                <Button type="primary">
                    <Link to="/about">关于</Link>
                </Button>
            </Flex>
            <Divider orientation="left">正文</Divider>
            <div>{route}</div>
        </>
    );
};

export default App;

然后就不会报错了

标签:used,const,App,react,报错,context,router,import,useRoutes
From: https://www.cnblogs.com/guangdelw/p/18087412

相关文章

  • 解决 [FATAL] plugin/loop: Loop (127.0.0.1:49443 -> :53) detected for zone "." 报
    问题背景:这个是安装k8s时报的错,安装使用的是ubuntu系统,当安装到coredns时报如下错 解决方法:查找了一番资料,得出结论这个算是ubuntu和k8scoredns安装的一个兼容性问题,不过很好解决,参照coredns官方文档就可以~首先贴出官网:https://coredns.io/plugins/loop/#troubleshooting......
  • vim 编辑报错导致无法正常退出和编辑
    vim编辑报错导致无法正常退出和编辑在使用Vi或Vim编辑器时,如果遇到错误,有时是因为非正常退出导致swap文件(.swp文件)的存在。以下是如何处理由swap文件引发的问题,以及删除swap文件这一解决方法:识别问题:当你试图打开一个之前未正常关闭的文件时,Vim会检测到与该文件关联......
  • spring refresh的流程(AbstractApplicationContext的refresh方法)
    12个阶段1、prepareRefresh,做准备工作2、obtainFreshBeanFactory,创建或获取beanfactory3、prepareBeanFactory,准备beanfactory4、postProcessBeanFactory,子类扩展beanfactory5、invokeBeanFactoryPostProcessors,后处理器扩展beanfactory6、registerBeanPostProcessors,准备b......
  • python requests.post Max retries exceeded with url 报错
    python requests.post  Maxretriesexceededwithurl 报错 importrequestsfromrequests.adaptersimportHTTPAdapterfromrequests.packages.urllib3.util.retryimportRetrysession=requests.Session()retries=Retry(total=5,backoff_factor=0.1,st......
  • Yolov9报错“IndexError: list index out of range”方法解决
     哈喽友友们好!今天继续分享关于yolov9的使用教程。 在使用yolov9的数据集时,你是否有类似的报错?如图作者本人一直查找问题,开始是想着数据集标签可能有问题,于是就更换数据集直到适合为止。但发现很多数据集还是会报这个错,只有少部分才能运行,这个方法治标不治本。 于是......
  • WPF MVVM模式ListBox下ContextMenu绑定Command的方法以及将所选的Item的数据传回去
    需求:ListBoxItem上右键,将数据传参。疑问:ContextMenu不继承DataContext,导致直接用RelativeSource找根的方式也绑定不到。解决方法:在ListBox.ContextMenu里写菜单,就可以直接绑定到ViewModel层的命令了,参数先用RelativeSource找到ContextMenu,再绑定PlacementTarget.SelectedItem。......
  • 线程同步 SynchronizationContext 在命令行程序中创建一个ui线程承载WPF运行
    1、创建一个线程作为ui线程ui线程要求必须是STA线程vart=newThread(()=>{});t.SetApartmentState(ApartmentState.STA);t.Start();2、创建一个公共的SynchronizationContext作为同步的入口在.NET框架中,Dispatcher是一个类,它负......
  • 线程同步 SynchronizationContext 初识
    什么是SynchronizationContext?SynchronizationContext是.NET中的一个类,用于管理跨线程的同步操作。它提供了一种机制,使线程可以协调对共享资源的访问,从而防止并发问题。SynchronizationContext的工作原理SynchronizationContext与每个线程相关联。当线程执行时,它会使用关......
  • Ubuntu上服务运行报错,No usable version of libssl was found
    运行服务时报错sudosystemctlstartComServer.servicesudosystemctlstatusComServer.service×ComServer.service-MESAPIservicesLoaded:loaded(/etc/systemd/system/ComServer.service;enabled;vendorpreset:enabled)Active:failed(Result:cor......
  • zabbix报错fping failed:no output
    zabbix的web前端界面突然连接不上了,页面一直转圈,无法响应,如下图: 排查思路如下:1、检查zabbix-server、Apache2、MySQL进程,发现都是active状态没有问题,端口号也正常2、查看zabbix-server日志文件,发现有报错,想着重启下zabbix-server进程,但是重启zabbix-server进程根本起不来,总......