我已经有一段时间没有使用反作用-Router了,也是第一次使用v6.我的应用程序正在使用:

  • Vite
  • 反作用
  • material -用户界面

我try 了以下几种方法:

  • 在网上搜索了一下
  • 将文档重读多次
  • 遵循react-router教程,并将其应用到我的应用程序中

我对应用程序采取了一步一步的方法,在进行下一个更改之前,我会对每个更改进行测试.当我通过输入路径作为URL进行测试时,似乎我的路由是正确的.然而,当我try 添加Link时,我得到了脱离上下文的错误.我知道我错过了一些简单的东西,但我只是没有看到它.以下是为简洁起见省略了导入的代码.

Index.jsx

反作用DOM.createRoot(document.getElementById('root')).render(
  <反作用.StrictMode>
    <ThemeProvider theme={theme}>
      {/* CssBaseline kickstart an elegant, consistent, and simple baseline to build upon. */}
      <CssBaseline />
      <App />
    </ThemeProvider>
  </反作用.StrictMode>
)

App.jsx

const router = createBrowserRouter([
  {
    path: "/",
    element: "",
    errorElement: <ErrorPage />,
    children: [
      {
        path: "/about",
        element: <About />,
      },
      {
        path: "/products",
        element: <Products />,
      },
      {
        path: "/",
        element: <Home />,
      },
    ]
  },

]);

function App() {
  const [count, setCount] = useState(0)

  return (  
    <><HeaderBar />
    <RouterProvider router={router}>
      <div>
        <Outlet />
        </div>
      </div>
    </RouterProvider></>
  )
}

export default App

HeaderBar.jsx(为简洁起见,仅显示失败元素)

<Button
  key={page.text}
  onClick={handleCloseNavMenu}
  sx={{ my: 2, color: 'white', display: 'block' }}
  component={Link}
  to={page.target}
>
  {page.text}
</Button>

我试图通过try 在各种组件周围包装<BrowserRouter>来创建上下文,但收到关于应用程序中有2个路由的错误消息.

推荐答案

这里的问题是,HeaderBar被呈现outside为路由,例如任何路由上下文,因此Link组件不工作.将其移动到路由中.

RouterProvider组件也不使用任何childrenprops ,因此"子"JSX被完全忽略,应该删除.

使用布局布线组件呈现页眉的示例,以及使用Outlet呈现嵌套布线的示例:

const AppLayout = () => (
  <>
    <HeaderBar />
    <Outlet />
  </>
);

const router = createBrowserRouter([
  {
    path: "/",
    element: <AppLayout />,
    errorElement: <ErrorPage />,
    children: [
      {
        path: "/about",
        element: <About />,
      },
      {
        path: "/products",
        element: <Products />,
      },
      {
        path: "/",
        element: <Home />,
      },
    ]
  },

]);

function App() {
  const [count, setCount] = useState(0)

  return <RouterProvider router={router} />;
}

export default App;

Javascript相关问答推荐

用相器进行向内碰撞检测

未捕获错误:在注销后重定向到/login页面时找不到匹配的路由

使搜索栏更改语言

Javascript json定制

Angular 订阅部分相互依赖并返回数组多个异步Http调用

如何通过将实例方法的名称传递给具有正确类型的参数的继承方法来调用实例方法?

使用VUE和SCSS的数字滚动动画(&;内容生成)

Reaction组件在本应被设置隐藏时仍显示

如何在Press上重新启动EXPO-AV视频?

MongoDB中的嵌套搜索

Cherrio JS返回父div的所有图像SRC

有没有办法通过使用不同数组中的值进行排序

如何使用puppeteer操作所有选项

Played link-Initialize.js永远显示加载符号

需要刷新以查看Mern堆栈应用程序中的更改

如何在不将整个文件加载到内存的情况下,在Node.js中实现Unix粘贴命令?

CSS网格使页面自动滚动

已在EventListener中更新/更改异步的React.js状态对象,但不会导致组件重新呈现

如何从图表中映射一组图表-js使用REACT

元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但GET:Object.在Reaction项目中