我的代码类似于以下内容:
var browserHistory = ReactRouter.browserHistory;
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var Link = ReactRouter.Link;
class App extends React.Component {
render() {
return (
<div>
<h1>Here is content:</h1>
{this.props.children}
<Link to="/Welcome">Welcome</Link> |
<Link to="/Login">Login</Link>
<a href="/">REFERENCE LINK</a>
</div>
);
}
}
class Welcome extends React.Component {
render() {
return (
<div>
<h1>No hejaaaa - welcome</h1>
</div>
);
}
}
class Login extends React.Component {
render() {
return (
<div>
<h1>No hejaaaa - Login</h1>
</div>
);
}
}
const Routes = (
<Router history={browserHistory}>
<Route path="/" component={App}>
<Route path="Welcome" component={Welcome}/>
<Route path="Login" component={Login}/>
<Route path="*" component={Welcome}/>
</Route>
</Router>
);
// init file:
var RouterContext = ReactRouter.RouterContext
var match = ReactRouter.match
match({
routes: Routes,
location: document.location.pathname
}, (err, redirectLocation, renderProps) => {
ReactDOM.render(<RouterContext {...renderProps} />, document.querySelector('#app'));
});
正确生成标记,但问题是:点击链接根本不起作用。 我做错了什么?
我的文章:
JSFIDDLE:https://jsfiddle.net/Lp3gzott/(相同的代码,但是被诽谤)
答案 0 :(得分:3)
我在react-router文档中找到了解决方案。根据{{3}}:
match({ routes, location: req.url }, (err, redirectLocation, renderProps) => { renderToString(<RouterContext {...renderProps} /> })
请注意RouterContext
代替Router
而history
参数
match
字段
match({ history, routes }, (error, redirectLocation, renderProps) => { ReactDOM.render(<Router {...renderProps} />, mountNode) })
注意location
缺少match
参数
在路线档案中:
导出<Route
而不是<Router
错误React attempted to reuse markup in a container but the checksum was invalid.
未再次显示。
链接就像魅力一样!
答案 1 :(得分:1)
match()
是服务器端呈现构造,它是故意静态的,因为在服务器上,您一次只响应一条路由。在客户端上,您希望实际呈现路由器组件
ReactDOM.render((
<Router>
{ Routes }
</Router>
), document.querySelector('#app'))
你的,标记不匹配可能是由于一个不同的问题,你可能想要查看众多&#34;通用反应中的一个&#34;起动器。