【问题标题】:Persistent Navigation React-Router持久导航 React-Router
【发布时间】:2017-02-23 00:04:13
【问题描述】:

React 新手,尝试使用 React-Router 在我的应用程序中创建持久导航时遇到了麻烦。

使用create-react-app"react-router": "^3.0.2"

我试图在页面顶部添加一个带有几个链接的导航。我不断收到的错误是Uncaught Error: <Link>s rendered outside of a router context cannot navigate.

index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import { browserHistory } from 'react-router';
import { Router, Route } from 'react-router';
import Routes from './routes';
import App from './components/App';
import './index.css';
import Navigation from './components/Navigation';

ReactDOM.render(
  <div>
    <Navigation />
    <Routes history={browserHistory} />
  </div>,
  document.getElementById('root')
);

导航/index.js

import React, { Component } from 'react';
import { Link } from 'react-router';

class Navigation extends Component {
  render() {
     return (
      <div>
        <ul>
          <li><Link to="about">About</Link></li>
          <li><Link to="not-found">Not Found</Link></li>
        </ul>
      </div>
    );
  }
}

export default Navigation;

routes.js

import React from 'react';
import { Router, Route, IndexRoute, Link, browserHistory } from 'react-router';
import App from './components/App';
import About from './components/About';
import NotFound from './components/NotFound';
import Navigation from './components/Navigation';

const Routes = (props) => (
  <div>
    <Router {...props}>
      <Route path="/" component={App} />
      <Route path="/about" component={About}/>
      <Route path="*" component={NotFound} />
    </Router>
  </div>
);

export default Routes;

我可以通过 url 导航(即 localhost:8080/about)并呈现正确的页面。但是无法弄清楚如何让导航工作并呈现正确的链接。

【问题讨论】:

    标签: javascript reactjs react-router


    【解决方案1】:

    您应该将Navigation 组件呈现为您的App 组件的一部分,而不是在您的index.js

    App 应该类似于

    class App extends Component {
      render() {
         return (
          <div>
            <Navigation />
            {this.props.children}
          </div>
        );
      }
    }
    

    你的路线也需要改变一点。

    <Router {...props}>
      <Route path="/" component={App}>
        {/* If you have a home page in your App component already, move it to a Home component */}
        <IndexRoute component={Home} />
        <Route path="/about" component={About}/>
        <Route path="*" component={NotFound} />
      </Route>
    </Router>
    

    React 路由器会将子路由中的组件作为子路由传递给父路由。

    例如,查看他们文档中的introduction examples

    【讨论】:

    • 所以我很难理解这个问题。 App 实际上应该只是我的 IndexRoute 并且嵌套在 App 中应该是我的所有其他组件吗?所以我用导航渲染了应用程序,现在如果你点击“关于”,你将渲染嵌套在应用程序组件内的关于组件?
    • 没错,您将在 App 内呈现 About(这就是 {this.props.children} 所做的)。
    • 实际上,我要编辑我的答案,我只是注意到你需要稍微调整你的路线......等等......
    • 您还可以通过不将routes.js 分开来使事情变得更简单,只需在index.jsNavigation 中定义您的路线App... 但最多你想如何组织事物(或者你的导航可能会变得多么疯狂)。
    • 是的,这就是我要做的。它仍然不能完全按照我的预期工作。因此习惯于使用 Angular 将事情像这样分离出来,从我在示例中看到的情况来看,React 并不真正需要它
    猜你喜欢
    • 2018-05-06
    • 2017-10-14
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    相关资源
    最近更新 更多