React Router V6 - 错误:useRoutes() 只能在 <Router> 组件的上下文中使用

新手上路,请多包涵

我已经安装了 react-router-dom V6-beta。通过遵循网站上的示例,我可以使用新选项 useRoutes 我设置了页面路由并将它们返回到 App.js 文件中。

保存后出现以下错误:

错误:useRoutes() 只能在组件的上下文中使用。

我想知道我是否在这里遗漏了什么?我在 src/pages 文件夹中创建了页面。

我的代码:

 import { BrowserRouter, Link, Outlet, useRoutes } from 'react-router-dom';

// Pages
import Home from './pages/Home';
import About from './pages/About';
import Services from './pages/Services';
import Gallery from './pages/Gallery';
import Prices from './pages/Prices';
import Contact from './pages/Contact';

const App = () => {
    const routes = useRoutes([
        { path: '/', element: <Home /> },
        { path: 'o-nama', element: <About /> },
        { path: 'usluge', element: <Services /> },
        { path: 'galerija', element: <Gallery /> },
        { path: 'cjenovnik', element: <Prices /> },
        { path: 'kontakt', element: <Contact /> }
    ]);

    return routes;
};

export default App;

原文由 Galanthus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

您应该在树的上方有一个 <BrowserRouter> (或任何 提供的路由器)。原因是 <BrowserRouter> 提供了使用 useRoutes() 创建路由时需要的历史上下文。请注意,更高意味着它不能在 <App> 本身中,但至少在呈现它的组件中。

这是您的入口点的样子:

 import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';

ReactDOM.render(
  <BrowserRouter>
    <App />
  </BrowserRouter>,
  document.getElementById('root'),
);

原文由 tavoyne 发布,翻译遵循 CC BY-SA 4.0 许可协议

I think the problem is that you still need to wrap routes ( Routes / useRoutes ) inside a Router element.

所以一个例子看起来像这样:

 import React from "react";
import {
  BrowserRouter as Router,
  Routes,
  Route,
  useRoutes,
} from "react-router-dom";

const Component1 = () => {
  return <h1>Component 1</h1>;
};

const Component2 = () => {
  return <h1>Component 2</h1>;
};

const App = () => {
  let routes = useRoutes([
    { path: "/", element: <Component1 /> },
    { path: "component2", element: <Component2 /> },
    // ...
  ]);
  return routes;
};

const AppWrapper = () => {
  return (
    <Router>
      <App />
    </Router>
  );
};

export default AppWrapper;

根据您的需要重构。

原文由 Bas van der Linden 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进