【问题标题】:<Link> outside <Router> error message in ReactReact 中 <Router> 外部的 <Link> 错误消息
【发布时间】:2021-12-07 07:42:45
【问题描述】:

我正在尝试在我的路由中设置一个自定义历史对象,以便能够在我的 redux 操作中使用它。我已经看到我们应该使用 'react-router' 中的&lt;Router&gt; 并在其中设置历史对象。这就是我所做的。

App.js

//** Import router */
import { Switch } from 'react-router-dom';
import { Router } from 'react-router';

import history from './hooks/useHistory';

const App = () => {
   return (
      <Router history={history}>
         <MainNavigation />
         <Switch>
            <Routes />
         </Switch>
      </Router>
   );
};

export default App;

MainNavigation.js

const MainNavigation = () => {
   return (
      <>
         <div className='navigation'>
            <ul>
               <Link to='/'>
                  <li>Home</li>
               </Link>
               <Link to='/contact'>
                  <li>Contact</li>
               </Link>
               <Link to='/about'>
                  <li>A propos</li>
               </Link>
               <Link to='/user-profile'>
                  <li>Votre compte</li>
               </Link>
            </ul>
         </div>
      </>
   );
};

export default MainNavigation;

最后,Routes.js

//** Import routers */
import { Redirect, Route } from 'react-router-dom';

const Routes = () => {
   return (
      <>
         <Route path='/' exact component={MainLayout} />
         <Route path='/about' exact component={About} />
         <Route path='/contact' exact component={ContactForm} />
         <Route path='/user-profile' exact component={UserAccount} />
         <Redirect to='/' />
      </>
   );
};

export default Routes;

我不明白为什么它说你不应该在&lt;Router&gt;之外使用&lt;Link&gt;,因为包含&lt;link&gt;(MainNavigation.js)的组件在&lt;Router&gt;内部标签。

【问题讨论】:

  • 我现在不能测试,因为我在工作,但 不应该也来自react-router-dom 吗?就像在文档中一样 reactrouter.com/web/guides/quick-start/…
  • 另外,还有一个关于使用 redux 历史的指南,最后还有一个专门的库。可能需要研究一下
  • @JulienRipet 我也想过,但似乎这是另一回事。如果您想使用自定义历史对象,您应该使用本文档reactrouter.com/web/api/Router 中提到的路由器。谢谢你,我会查看指南。

标签: javascript reactjs react-hooks react-router


【解决方案1】:

根据此处的好答案,您似乎需要使用 BrowserRouter 或其他其中之一:You should not use <Link> outside a <Router>

还有一件事:尝试将li 元素放在&lt;Link&gt; 标记之外,这样你就有ul &gt; li &gt; Link

【讨论】:

  • 感谢您的回复,我已经尝试过了,但是当我尝试在我的操作中使用 history.push() 时,url 会更新,但组件不会呈现。我查看了上面发送的文档。
  • 你在使用 React-Router 的 useHistory 钩子吗?
  • 在我的 useHistory 文件中我写了这个:import { createBrowserHistory } from 'history'; export const myHistory = createBrowserHistory(); PS:我改变了一点名字,但逻辑是一样的
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 2023-01-31
  • 2021-01-04
  • 1970-01-01
  • 2020-03-13
  • 2011-08-01
  • 1970-01-01
  • 2019-09-16
相关资源
最近更新 更多