javascript - React-Router v4 分离链接和路由路径元素

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

(为清楚起见进行了更新)我的应用程序具有以下结构:

<Layout />
  /components/
    <Header /> 
    <Navigation />
    <Stage />
    <Footer />
  /pages/
    <Home />
    <About />
    <Contact />

我的想法是拥有 <Navigation>元素分离,并导入到父元素中 <Header> (以及后来的站点地图)。然后将所有组件暂存到父级 <Layout> , 它被送入 <div id="root">

我的/pages/组件的内容已成功调用并使用以下代码呈现。但是此页面内容呈现在我的 <header> 中元素,打破了页面层次结构。

我的意图是拥有 <Switch>设备渲染 <Stage> 中的/pages/组件父组件。

任何移动 <Switch> 的尝试元素到 <Stage>组件导致整个应用无法加载/呈现。

import React from 'react';

import {
  BrowserRouter as Router, Route, Link, Switch
} from 'react-router-dom';


import Home from './../pages/Home';
import About from './../pages/About';
import Contact from './../pages/Contact';

export default class Navigation extends React.Component {
  render() {
    return (
      <Router>
        <div className="navigation">

          <nav>
            <Link to="/">Home</Link>
            <Link to="/about">About</Link>
            <Link to="/contact">Contact</Link>
          </nav>

{/*
  Below should be repositioned outside of <header>, in Stage component
*/}
          <div className="stage">
            <Switch>
              <Route exact path="/" component={Home} />
              <Route path="/about" component={About} />
              <Route path="/contact" component={Contact} />
            </Switch>
          </div>

        </div>
      </Router>
    )
  }
}

我的问题是:如何让路由器在我的 <Stage> 中呈现所需的/page/组件?组件,当从 <Navigation> 中选择时组件。

由于所有 reacttraining.com 示例都是单页的,我很难确定我在假设我的应用程序应该如何最佳构造时是否犯了逻辑错误,或者是编程错误使用 react-router v4 重新创建两个元素之间的关系。

最佳答案

您需要做的就是将这两个 div 分开,因为您将 stage 包装在 header 中。由于组件需要在单个元素中呈现,因此您需要围绕整个内容使用另一个 div:

export default class Navigation extends React.Component {
  render() {
    return (
      <Router>
        <div>
          <div className="navigation">
            <nav>
              <Link to="/">Home</Link>
              <Link to="/about">About</Link>
              <Link to="/contact">Contact</Link>
            </nav>
          </div>

          <div className="stage">
            <Switch>
              <Route exact path="/" component={Home} />
              <Route path="/about" component={About} />
              <Route path="/contact" component={Contact} />
            </Switch>
          </div>
        </div>
      </Router>
    );
  }
}

更新: 更新我的答案:

import React from 'react';
import { render } from 'react-dom';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';

const Header = () => <h1>I'm a header</h1>;

const Navigation = () => (
  <nav>
    <Link to="/">Home</Link>
    <Link to="/about">About</Link>
    <Link to="/contact">Contact</Link>
  </nav>
);

const Stage = () => (
  <div>
    <Route exact path="/" component={Home} />
    <Route path="/about" component={About} />
    <Route path="/contact" component={Contact} />
  </div>
);

const Footer = () => <h6>Footer</h6>;

const Home = () => <h3>Home</h3>;
const About = () => <h3>About</h3>;
const Contact = () => <h3>Contact</h3>;

const App = () => (
  <Router>
    <div>
      <Header />
      <Navigation />
      <Stage />
      <Footer />
    </div>
  </Router>
);

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

这是工作版本: https://codesandbox.io/s/v21BD37NX

关于javascript - React-Router v4 分离链接和路由路径元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43776887/

相关文章:

javascript - 在异步 ajax 请求之前运行函数

javascript - Reactjs , .map 函数输出变量错误

javascript - React html 可定制样式

javascript - 将 props 从 react-cosmos 传递到 styled-components

javascript - React useEffect 不会在路由更改时触发

react-router-v4 - React Router V4角色库授权

javascript - typescript 中的变量声明

javascript - 为什么 JS 允许在数组中使用负索引?

reactjs - 有没有办法在 react 路由中隐藏查询字符串中的参数?

javascript - Angularjs 不工作并且页面加载太慢