私の目標は、ネストされた URL を次のように定義することです。
/dashboard/modules/12242433
この例を使用してコードをモデル化しました: React Router Examples: dynamic-segments
これが私のルートを定義するrenderメソッドです
render((
<Router history={browserHistory}>
<Route path="/" component={App}>
<Route path="dashboard" component={Dashboard}>
<Route path="modules" component={Modules}>
<Route path=":module_id" component={Module} />
</Route>
</Route>
</Route>
</Router>
), document.getElementById('app'));
には移動できますが、または/dashboard
に移動しようとするとすぐに、あまり役に立たないように見えるエラー メッセージが表示されます。/dashboard/modules
/dashboard/modules/123232
bundle.js:2 Uncaught SyntaxError: Unexpected token <
これが私のコンポーネントです。私の理解では、コンプの子をレンダリングしている限り、これは機能するはずです。
ダッシュボード
import React from 'react'
export default React.createClass({
render() {
return (
<div>
<p> Hello, Dashboard! </p>
{ this.props.children }
</div>
)
}
})
モジュール
import React from 'react'
export default React.createClass({
render() {
return (
<div>
<p> Hello, Modules! </p>
{ this.props.children }
</div>
)
}
})
モジュール
import React from 'react'
export default React.createClass({
render() {
return (
<div>
<p> Hello, Single Module! </p>
</div>
)
}
})
アップデート
私のコードは正しかった(っぽい)ことがわかりましたが、今はさらに混乱しています。このナビゲーションは、クリックによって URL に到達する限り機能します。
<NavLink to="/dashboard/modules/SomeModName">View Mod</NavLink>
URL を入力するだけでテストしてきましたが/dashboard/modules/SomeModName
、これは常に壊れるものです。
この URL を両方の方法で機能させる方法はありますか?
2 つ目のバグを見つけましたが、それらは関連していると思います..
リンクをクリックする/dashboard/modules
と正しく読み込まれますが、更新を押すと元のエラーが表示されます。
React Router のどのコア部分を見落としましたか?
2 回目の更新 このコードを例からローカルに取得すると、バグを再導入できます (詳細ビューで更新するとページが壊れます)。ただし、リポジトリ全体を複製してそのまま実行しても、更新は中断されません。この行動に影響を与えるのは何ですか?
webpack.config.js
var path = require('path');
var webpack = require('webpack');
module.exports = {
devtool: 'eval',
entry: [
'webpack-hot-middleware/client',
'./client/index'
],
output: {
path: path.join(__dirname, 'static'),
filename: 'bundle.js',
publicPath: '/static/'
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
],
module: {
loaders: [
{
test: /\.json$/,
loader: 'json'
},
{
test: /\.js$/,
loader: 'babel-loader',
include: path.join(__dirname, 'client'),
query: {
plugins: ['transform-runtime'],
presets: ['es2015', 'stage-0', 'react', 'react-hmre']
}
},
{
test: /\.scss$/,
loaders: ['style', 'css', 'sass']
}
]
}
};