我无法在React Router中使用URL参数功能,任何见解都会有所帮助!我尝试使用'react-router-dom'而不是'react-router',但我得到了这个人得到的错误:https://github.com/ReactTraining/react-router/issues/1799
当我执行localhost:8000时,应用程序可以运行。当我转到localhost:8000/123时,浏览器会将 index.html 呈现为没有反应。 Express是否干扰了React?在Express中我所拥有的是以下内容:
app.get('*', function response(req, res) {
res.write(middleware.fileSystem.readFileSync(path.join(__dirname, 'dist/index.html')));
res.end();
});
这是我的 main.js :
import 'babel-polyfill';
import React from 'react';
import ReactDOM from 'react-dom';
import { Router, browserHistory } from 'react-router';
import Routes from './shared/components/Routes';
const ROOT_ELEMENT = 'app';
ReactDOM.render((
<Router history={browserHistory}>
{Routes}
</Router>
), document.getElementById(ROOT_ELEMENT));
我的 routes.js :
import { Route, IndexRoute, Link } from 'react-router';
import App from './App';
import HomePage from '../../pages/home/page';
import AboutPage from '../../pages/about/page';
const Child = ({ match }) => (
<div>
<h3>ID: {match.params.id}</h3>
</div>
)
export default (
<Route path="/" component={App}>
<IndexRoute component={HomePage} />
{/* <Route path="about" component={AboutPage} /> */}
<Route path="/:id" component={Child} />
</Route>
);
我的主页组件在不同的文件中定义如下(省略所有导入和生命周期功能):
export default React.createClass({
render: function() {
{* bunch of JSX goes here *}
}
});
根据要求,我的 index.html 文件:
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>Consent Form</title>
<meta name="description" content="Privacy Consent Webform">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!--Google Material Design Icons-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
<div id="app"></div>
</body>
</html>
由于我的 webpack config (捆绑注入了!),html没有捆绑包作为脚本标记(以下代码只是配置的一部分):
entry: [
'webpack-hot-middleware/client',
'bootstrap-loader',
path.join(__dirname, 'src/main.js')
],
output: {
path: path.join(__dirname, '/dist/'),
filename: '[name].js',
publicPath: '/'
},
plugins: [
new HtmlWebpackPlugin({
template: 'src/index.tpl.html',
inject: 'body',
filename: 'index.html'
})
答案 0 :(得分:1)
当您向应用添加新路线时,您不能依靠热重新加载来注入新路线+组件。我不得不按CTRL + C再次运行npm start
。
这解决了问题!!
另外react-router-dom是React Router v4包,而react-router是旧版本。感谢@HalCarleton指出了这一点。我看到代码示例到处都是react-router而官方文档显示的是react-router-dom而我真的很困惑为什么有两种不同类型的包。
答案 1 :(得分:0)
尝试做这样的事情:
<Switch>
<Route path="/auth/login/:token" render={props => <Login {...this.props} {...props}/>}/>
<Route path="/auth/login" component={Login}/>
</Switch>
首先使用带参数的路线,然后使用不带参数的路线。
在我的登录组件中,我将此console.log(props.match.params.token);
进行了测试并为我工作。