我一直在努力寻找实现这一目标的好方法,但基本上我想要做的是通过服务器呈现页面,但后续路由是客户端react-router
。我可以使用createMemoryHistory
为我的路由器设置服务器端路由器。
class Router extends React.Component {
render() {
return(
<Router history={createMemoryHistory}>
<Route path="/" component={App}>
<IndexRoute component={Index} />
<Route path="/contact" component={Contact}/>
<Route path="/about" component={About}/>
</Route>
</Router>
)
}
}
然后通过react-rails gem我可以在服务器上呈现内容。
<%= react_component('Router', {}, {prerender: true}) %>
这个问题是当我导航到不同的页面时,URL不会改变。理想情况下,我希望能够使用createMemoryHistory
在服务器上加载路由器,然后一旦加载,我就想切换到browserHistory
。
答案 0 :(得分:1)
您可以通过先前根据环境设置history
道具来实现此目的。我不熟悉Rails上的react_component
,但我猜测MountUp
是你的根组件。
const history = process.env.NODE_ENV === 'server' ? createMemoryHistory : browserHistory;
// ...
class MountUp extends React.Component {
render() {
return (
<Router history={history}/>
);
}
}
// ...
class Routes extends React.Component {
render() {
return(
<Router history={this.props.history}>
<Route path="/" component={App}>
<IndexRoute component={Index} />
<Route path="/contact" component={Contact}/>
<Route path="/about" component={About}/>
</Route>
</Router>
)
}
}