React Router子渲染问题

时间:2016-08-28 16:14:27

标签: javascript reactjs

我距动脉瘤两步之遥,试图解决这个问题(帮帮我)。对于Stack Overflow的Javascript向导,这应该没问题。我认为手头的问题是一个小修复,我只是因为缺乏经验而没有看到。

当前设置

  • 在我自己的机器上本地使用React与Webpack,Express,React Router和Node JS。

  • 目前需要讨论三个组件/文件,我将在下面列出。在您看到代码之前,对每个内容的快速描述将为其目的提供简单的背景信息。

    - > Index.js(处理最终渲染的主文件)。

    - > App.js(" Main"组件)。

    - > Messages.js(我试图在App.js中渲染的子组件)。

问题 一切正常,但当我点击链接转到消息组件时,应用程序的标题和链接消失了。但是,它确实显示了我在messages组件中的return语句中放入的所有信息,这是一件好事。

我的问题 我相信我只是误解了React Router中嵌套路由的基本原理。我最初的理解是,如果我像现在这样设置我的代码,则消息组件将在链接点击时显示在应用程序组件的INSIDE中,并且不会删除父App组件中关联的任何文本。

我提供的以下材料是按订购的,

- Screenshot of the App Component rendered on the screen, showing the title and the link to messages.
- Screenshot of the view after the messages link is clicked.
- Component Code.

App on initial load

View after the link is clicked



// App.js
import '../assets/stylesheets/base.scss';
import React, { Component } from 'react';
import { Link } from 'react-router';

export default class App extends Component {
  render() {
    return (
      <div>
        <div id="title">
          <h1>My App</h1>
        </div>
        <div id="navigation">
          <ul>
            <li><Link to="/messages">Messages</Link></li>
          </ul>
        </div>
        {this.props.children}
      </div>
    )
  }
}
&#13;
&#13;
&#13;

&#13;
&#13;
// Messages.js

import React, { Component } from 'react';

const Messages = () => {
  return (
    <div id="messages">
      <h1>My Messages</h1>
    </div>
  );
}

export default Messages;
&#13;
&#13;
&#13;

&#13;
&#13;
// Index.js
import React from 'react';
import { render } from 'react-dom';
import { Router, Route, browserHistory } from 'react-router';
import App from './components/App';
import Messages from './components/messages';

render((
  <Router history={browserHistory}>
    <Route path="/" component={App}/>
      <Route path="/messages" component={Messages}/>
  </Router>
), document.getElementById('root'))
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

您需要将该项目建模为单页应用程序(SPA)。像这样的东西

<Router history={browserHistory}>
    <Route path="/" component={App}>
      <Route path="/messages" component={Messages}/>
      <Route path="*" component={NoMatch}/>
    </Route>
  </Router>