【发布时间】:2016-02-14 08:59:25
【问题描述】:
我有这个不起作用的简单代码。我从 react-router 项目页面中取出它并稍作修改以使其看起来更好一些。
设置
我有几个非常简单的 react 组件:
var IndexPage = React.createClass({
render(){
return (<h1>Index Page</h1>);
}
});
var AboutPage = React.createClass({
render(){
return (<h1>About page</h1>);
}
});
var NotFoundPage = React.createClass({
render(){
return (<h1>Not found page</h1>);
}
});
我还设置了 react 路由器:
var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var BrowserHistory = ReactRouter.browserHistory;
var Render = ReactDOM.render;
这就是我使用 react router 2.0 的方式。
Render((
<Router history={BrowserHistory}>
<Route path="/" component={IndexPage}>
<Route path="about" component={AboutPage}/>
<Route path="*" component={NotFoundPage}/>
</Route>
</Router>
), document.body)
我使用 BrowserHistory(不是 HashHistory)来避免 url 中的哈希。
我的服务器在 8080 端口上的 IIS 10 (Windows 10) 下启动。
问题
http://localhost:8080/
转到 IndexPage 组件。这是正确的。
http://localhost:8080/about
转到 IIS 404 错误页面。在这种情况下路由不起作用
http://localhost:8080/ttt
再次进入 IIS 404 错误页面。
所以路由器看不到 / 之后的嵌套路径。它甚至不关心它们是否正确。
什么会导致这种奇怪的行为?
提前致谢!
更新
我发现下一个字符串解决了客户端路由的问题:
{this.props.children}
这是固定代码:
var IndexPage = React.createClass({
render(){
console.log('index page render');
return (<div>
<h1>Index Page</h1>
<Link to={ '/about' }>about</Link>
{this.props.children}
</div>);
}
});
【问题讨论】:
-
localhost:8080/#about 指向 IndexPage
-
我提到我使用 BrowserHistory 而不是 HashHistory 禁用了哈希
-
我有相同的设置,服务器和使用 {this.props.children},但我得到的是 IIS 404 而不是我的自定义 404。在 webpack-dev-server 上运行时有效。
-
我还没有使用后端,因为它目前不那么重要。我使用客户端路由。如果你愿意,我可以给你发一个完整的非常简单的例子。
标签: javascript reactjs react-router