React RouterのURLパラメータ機能を動作させることができません。洞察があれば役に立ちます!「react-router」の代わりに「react-router-dom」を使用しようとしましたが、この人が取得しているエラーが発生します: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>
);
My Homeコンポーネントは、別のファイルで次のように定義されています(すべてのインポートおよびライフサイクル関数は省略されています)。
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構成のため、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'
})
アプリに新しいルートを追加する場合、ホットリロードに依存して新しいルートとコンポーネントを挿入することはできません。CTRL + Cでnpm start
もう一度実行する必要がありました。
これで問題は解決しました!!
また、react-router-domはReact Router v4パッケージですが、react-routerは古いバージョンです。それを指摘してくれた@HalCarletonに感謝します。公式ドキュメントにreact-router-domが示されている間、react-routerのコード例をいたるところに見ましたが、2つの異なるタイプのパッケージがある理由について本当に混乱していました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加