javascript - 路由器 6.4 : useHref() may be used only in the context of a <Router> component

标签 javascript reactjs react-hooks react-router react-router-dom

这不是 this 的副本因为那里的答案没有说明如何使用 router 6.4(即使用 createBrowserRoutercreateRoutesFromElements)执行此操作。 也不确定组件布局是否相似。


这是我的代码:

const router = createBrowserRouter(
  createRoutesFromElements(
    <React.Fragment>
      <Route path="/" element={<Test />} />
      <Route path="dashboard" element={<Test2 />} />
    </React.Fragment>
  )
);

const { Header, Content, Sider } = Layout;
function App() {
  return (
    <Layout style={{ height: "100%" }}>
      <Header className="header">
        <Menu theme="dark" mode="horizontal" defaultSelectedKeys={["2"]} items={items1} />
      </Header>
      <Layout>
        <Content
          style={{
            padding: 24,
            margin: 0,
            minHeight: 280,
          }}
        >
          <RouterProvider router={router} />
        </Content>
      </Layout>
    </Layout>
  );
}

我遇到了错误

useHref() may be used only in the context of a component

我知道这与我的 Links 没有嵌入在 Router 中有关,但是使用这个 6.4 react router 的新 API 我该如何解决这个问题?

最佳答案

即使使用新的 RRDv6.4 数据 API 和数据路由器,Link 组件仍然需要在路由上下文中呈现。您可以将所有 App 组件布局移动为创建路由器时配置的布局路由。

例子:

const { Header, Content, Sider } = Layout;

const AppLayout = () => (
  <Layout style={{ height: "100%" }}>
    <Header className="header">
      <Menu
        theme="dark"
        mode="horizontal"
        defaultSelectedKeys={["2"]}
        items={items1}
      />
    </Header>
    <Layout>
      <Content
        style={{
          padding: 24,
          margin: 0,
          minHeight: 280,
        }}
      >
        <Outlet />
      </Content>
    </Layout>
  </Layout>
);

const router = createBrowserRouter(
  createRoutesFromElements(
    <Route element={<AppLayout />}>
      <Route path="/" element={<Test />} />
      <Route path="dashboard" element={<Test2 />} />
    </Route>
  )
);

...

function App() {
  return (
    <RouterProvider router={router} />
  );
}

关于javascript - 路由器 6.4 : useHref() may be used only in the context of a <Router> component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74232682/

相关文章:

javascript - 如何仅在单击某个元素时显示它并在单击其他元素时隐藏它?

javascript - 始终提交相同的表格

javascript - 在 Babel 7 中包含一些 node_modules 目录

react-native - 无效的 Hook 调用。钩子(Hook)只能在函数组件的主体内部调用,错误仅发生在浏览器中而不是移动设备上

javascript - 使用来自 json 的 ng-flow.js 填充图像文件

javascript - 使用 Frida 构造字符串数组

reactjs - 使用 makeStyles - useStyles() 全局抛出 'Invalid Hook Call' 错误

javascript - 如果父组件中的参数发生更改,则子组件的数组不会重新渲染

reactjs - React.js useEffect 和依赖数组,使用解构 useState

reactjs - 如何在自定义 Hook 中创建一个处理 Hook 内状态的组件?