【问题标题】:Error: useHref() may be used only in the context of a <Router> component错误:useHref() 只能在 <Router> 组件的上下文中使用
【发布时间】:2021-10-09 17:09:46
【问题描述】:

**当我直接在我的路由器组件中编写我的导航栏组件内容时。它工作正常但是当我在 NavBar 组件中编写该内容时,它会生成以下错误

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

我正在使用 "react-dom": "^17.0.2", "react-router-dom": "^6.0.0-beta.6",

以下是我的组件..

我的导航栏组件:-

import { Link } from "react-router-dom";
// import styles from './NavBar.module.css';
export const NavBar = () => {
  return (
      <nav>
        <Link to="/"> Home </Link>
        <Link to="/about"> About </Link>
        <Link to="/product"> Product </Link>
      </nav>
  );
}

我的路由组件:-

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

// importing Component's
import { Home } from "./Components/Home/Home";
import { About } from "./Components/About/About";
import { Products } from "./Components/Products/Products";
import { ProductItems } from "./Components/ProductItems/ProductItems";
import  {NavBar}  from "./Components/NavBar/NavBar";
import { Fotter } from "./Components/Fotter/Fotter";

export const RouterConfig = () => {
  return (
    <Router>
      <NavBar />
      <Switch>
        <Route exact path="/" component={Home} />
        <Route path="/about" component={About} />
        <Route exact path="/product" component={Products} />
        <Route path="/product/:id" component={ProductItems} />
        <Route path="*" component={() => <h2>404 Not Found </h2>} />
      </Switch>
      {/* <Fotter />' */}
    </Router>
  );
};

【问题讨论】:

  • 供将来参考,我认为问题在于您使用的是 标签,而在 react-router 6 中,您应该改用
  • 任何答案都解决了您的问题吗?
  • 我使用 BrowserRouter 作为 Routes 的直接父级,我看到 BrowserRouter 或 HashRouter 或您正在使用的任何东西都应该放在索引文件中-

标签: reactjs react-router react-router-dom


【解决方案1】:
import {BrowserRouter as Router} from "react-router-dom";

在组件 App.js 或更高版本中使用 index.js 并将您的组件包装在 Router 中。 然后问题就会消失;-) 在您的情况下,我看到两个选项:

  1. index.js

import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import { BrowserRouter as Router } from "react-router-dom";

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

使用 App 组件代替 RouterConfig 组件。

  1. App.js

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

// importing Component's
import { Home } from "./Components/Home/Home";
import { About } from "./Components/About/About";
import { Products } from "./Components/Products/Products";
import { ProductItems } from "./Components/ProductItems/ProductItems";
import  {NavBar}  from "./Components/NavBar/NavBar";
import { Fotter } from "./Components/Fotter/Fotter";

export const App = () => {
  return (
    <Router>
      <NavBar />
      <Switch>
        <Route exact path="/" component={Home} />
        <Route path="/about" component={About} />
        <Route exact path="/product" component={Products} />
        <Route path="/product/:id" component={ProductItems} />
        <Route path="*" component={() => <h2>404 Not Found </h2>} />
      </Switch>
      {/* <Fotter />' */}
    </Router>
  );
};

我尽力解释它。希望这对您有所帮助 ;-) 最好的问候和祝你好运! 如果您仍然感到困惑,请查看这里 => React Router V6 - Error: useRoutes() may be used only in the context of a <Router> component

【讨论】:

    【解决方案2】:

    导出未正常运行并导致错误。您可以像下面这样重新输入并尝试吗?:

    import { Link } from "react-router-dom";
    
    const NavBar = () => {
      return (
          <div>
            <Link to="/"> Home </Link>
            <Link to="/about"> About </Link>
            <Link to="/product"> Product </Link>
          </div>
      );
    }
    export default Navbar;
    

    另外,导入语句不需要花括号。 import NavBar from "./Components/NavBar/NavBar";

    如果问题仍然存在,您可以检查您的文件路径,因为您重复了两次文件夹名称,这对我来说看起来很可疑。也许你的意思是: import NavBar from "./Components/NavBar";

    【讨论】:

    • 阿卜杜勒哈基姆!我试过你所有的建议都没有用......再次出现同样的错误,(你说我重复的导入部分很好,在 NavBar 文件夹中的 b/c 没有问题我有 NavBar.js ..这就是为什么我写)
    • 那么我想问题出在你的自定义钩子 useHref 上。您可能会发现这个问题很有用:stackoverflow.com/questions/53028117/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多