【发布时间】:2017-04-17 10:50:17
【问题描述】:
我有这两个完全相互独立的组件。我想在输入/ 时渲染App 并在我转到/#/about 时渲染About
我得到了这段代码(但我测试了很多其他代码):
import React from 'react';
import ReactDOM from 'react-dom';
import { Router, Route, Link, browserHistory } from 'react-router'
import App from './App';
import About from './About';
ReactDOM.render(
<Router history={browserHistory}>
<Route path="/" component={App} >
<Route path="/about" component={About} />
</Route>
</Router>
, document.getElementById('root')
);
我也尝试过类似的东西
<Route path="/about" component={About} />
<Route path="/" component={App} />
并将 /about 更改为 /#/about, about
但它总是呈现“后备”/,无论如何它总是走这条路线。
如何让这个应用程序正确导航到/ 和/about 并渲染App 和About 组件?
@edit
假设我的 About 组件已损坏,我删除了第一个 Route 并仅保留了 /about(仅保留了 /about 路由):
<Route path="/about" component={App} />
(我在之前的测试中也尝试保留 About)并将 /about 更改为 about 和 /#/about。
我在控制台上收到此错误:
“VM3651 bundle.js:30801 警告:[react-router] 位置“/#/about”不匹配任何路由”
@edit 2
我按照@Dominic 发布的示例进行了更改。我必须进行一些修改以确保两个组件都能呈现。我将 {this.props.children} 添加到所有组件以了解会发生什么。
//imports
ReactDOM.render(
<Router history={browserHistory}>
<Route path="/" component={About} >
<IndexRoute component={App} />
<Route path="/about" component={Other} />
</Route>
</Router>
,document.getElementById('root'));
路由http://localhost:3000/#/about正在渲染:
> 关于 > 应用程序
所以它正在渲染 IndexRoute,它没有被/about 捕获。
这正是我现在所需要的,因为我不想要根组件,我想要 2 条路由到 2 个不同且独立的组件。我需要类似两条兄弟路线的东西。
@edit
About.js
import React, { Component } from 'react';
class About extends Component {
render() {
return (
<div>
About page
{this.props.children}
</div>
);
}
}
export default About;
解决方案:
由于我在 URL 中使用 HASH (#),我应该在 <Router history={hashHistory}> 中使用来自 React Router 的 hashHistory
【问题讨论】:
-
我注意到这里与github.com/ReactTraining/react-router 的唯一区别是他们使用了 render(( .....), document.getElement....);当您只使用 1 () 时,我不敢相信这就是原因,但谁知道呢
-
你能展示你的关于组件吗?
-
你如何重定向到关于页面? ?还是手动输入网址?您正在使用 browserHistory,因此 url 中不应存在哈希 :)
-
我在 url 中使用 #(哈希)(参见新编辑)。所以我应该去
http://localhost:3000/about? webpack 服务器响应“Cannot GET /about” -
与
hashHistory一起工作!谢谢
标签: javascript reactjs routes react-router react-jsx