您不应该使用< Link>在< Router>外部 [英] You should not use <Link> outside a <Router>

查看:93
本文介绍了您不应该使用< Link>在< Router>外部的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在示例应用程序中设置react-router,但出现以下错误:

You should not use <Link> outside a <Router>

我的应用设置如下:

父项

 const router = (
  <div className="sans-serif">
    <Router histpry={browserHistory}>
      <Route path="/" component={Main}>
        <IndexRoute component={PhotoGrid}></IndexRoute>
        <Route path="/view/:postId" component={Single}></Route>
      </Route>
    </Router>
  </div>
);

render(<Main />, document.getElementById('root'));
 

Child/Main组件

 export default () => (
  <div>
    <h1>
      <Link to="/">Redux example</Link>
    </h1>
  </div>
)
 

你知道我在做什么错吗?

这是一个沙盒链接,以演示该问题.

解决方案

我假设您使用的是React-Router V4,就像您在原始这些路由器 ,BrowserRouter/HashRouter等...,因为您使用的是React-Router V4.

  • 路由器只能有一个孩子,因此将所有路由包装在div此工作示例 .

    父项:

    const App = () => (
      <BrowserRouter>
        <div className="sans-serif">
          <Route path="/" component={Main} />
          <Route path="/view/:postId" component={Single} />
        </div>
      </BrowserRouter>
    );
    
    render(<App />, document.getElementById('root'));
    

    路线中的

    Main组件

    import React from 'react';
    import { Link } from 'react-router-dom';
    
    export default () => (
      <div>
        <h1>
          <Link to="/">Redux example</Link>
        </h1>
      </div>
    )
    

    等等.


    也请检查以下答案:使用React Router v4的嵌套路由

    I'm trying to set up react-router in an example application, and I'm getting the following error:

    You should not use <Link> outside a <Router>
    

    My app is set up like so:

    Parent component

    const router = (
      <div className="sans-serif">
        <Router histpry={browserHistory}>
          <Route path="/" component={Main}>
            <IndexRoute component={PhotoGrid}></IndexRoute>
            <Route path="/view/:postId" component={Single}></Route>
          </Route>
        </Router>
      </div>
    );
    
    render(<Main />, document.getElementById('root'));
    

    Child/Main component

    export default () => (
      <div>
        <h1>
          <Link to="/">Redux example</Link>
        </h1>
      </div>
    )
    

    Any idea what I'm doing wrong here?

    Here's a Sandbox link to demonstrate the problem.

    解决方案

    I'm assuming that you are using React-Router V4, as you used the same in the original Sandbox Link.

    You are rendering the Main component in the call to ReactDOM.render that renders a Link and Main component is outside of Router, that's why it is throwing the error:

    You should not use <Link> outside a <Router>

    Changes:

    1. Use any one of these Routers, BrowserRouter/HashRouter etc..., because you are using React-Router V4.

    2. Router can have only one child, so wrap all the routes in a div or Switch.

    3. React-Router V4, doesn't have the concept of nested routes, if you wants to use nested routes then define those routes directly inside that component.


    Check this working example with each of these changes.

    Parent Component:

    const App = () => (
      <BrowserRouter>
        <div className="sans-serif">
          <Route path="/" component={Main} />
          <Route path="/view/:postId" component={Single} />
        </div>
      </BrowserRouter>
    );
    
    render(<App />, document.getElementById('root'));
    

    Main component from route

    import React from 'react';
    import { Link } from 'react-router-dom';
    
    export default () => (
      <div>
        <h1>
          <Link to="/">Redux example</Link>
        </h1>
      </div>
    )
    

    Etc.


    Also check this answer: Nested routes with react router v4

    这篇关于您不应该使用&lt; Link&gt;在&lt; Router&gt;外部的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    相关文章
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆