【发布时间】:2018-12-06 22:07:46
【问题描述】:
我正在使用 react v16 和 react-router-dom v4,并且我的路由大部分都在工作。我正在使用 webpack-dev-server 来运行我的开发环境,当我刷新或手动输入 react 应用程序的 url 时,它大部分时间都可以正常工作。我的问题是,当我开始向路由添加 url 路径时,刷新和手动输入 url 将不再起作用。
一个简单的例子:
<Router>
<Root>
<Switch>
<Route exact path='/' component={Welcome} />
<Route path='/home' component={Home} />
<Route path='/profile/:id' component={Profile} />
<Route path='/profile/dashboard' component={Dashboard} />
<Redirect to='/' />
</Switch>
</Root>
</Router>
在这种情况下,当我从应用程序开始时,我目前可以导航到任何我想要的地方,刷新也适用于“/home”和“/”路线。唯一的问题是具有额外路径的路线。如果我要导航到“/profile/dashboard”并刷新,我会收到一堆 404 错误,说明所有静态链接都已损坏。似乎 webpack 现在正在重定向到不存在的 /profile/ 文件夹。我怎样才能解决这个问题?这是我的 react-router-dom 设置还是我的 webpack 设置的问题?
这也是我的开发环境的 webpack 配置。我用--history-api-fallback调用它
module.exports = {
devServer: {
inline: true,
contentBase: './',
port: 4200
},
devtool: 'cheap-module-eval-source-map',
entry: './index.js',
mode: 'development',
module: {
loaders: [
{
test: /\.js$/,
loaders: ['babel'],
exclude: /node_modules/
},
{
test: /\.scss/,
loader: 'style-loader!css-loader!sass-loader'
}
]
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.min.js'
},
plugins: [
new webpack.optimize.OccurrenceOrderPlugin(),
new HtmlWebpackPlugin({
template: './index.html'
})
]
};
【问题讨论】:
-
注意:由于您的路由排序,url
/profile/dashboard将匹配您的/profile/:id路由,因此使用组件Profile。您可能希望在您的<Switch>中将/profile/dashboard放在/profile/:id上方。 -
你说得对,我知道这一点。这只是一个试图证明我的问题的简单示例。我可以将“精确”道具放在一条路线上,以确保它不会在那里给出误报。或者我可以重新排序,就像你说的那样。
标签: javascript reactjs webpack webpack-dev-server