反应路由器+ webpack,子路由不工作

时间:2016-10-14 19:56:30

标签: reactjs webpack redux react-router webpack-dev-server

我正在尝试为我的应用设置路由器,并使基本/入口点正常工作(貌似)。似乎当我尝试开始添加子路线时,它正在破碎。我现在有一个很直接的设置。我正在使用react + redux,我的渲染看起来像:

 ReactDOM.render(
<Provider store={store}>
     <Router history={browserHistory} >
        <Route path="/" component={comp1.Component}>
            <Route path="test" component={comp2.Component} />
        </Route>
    </Router>
</Provider>,
// eslint-disable-next-line no-undef
document.getElementById('app')
);

我在localhost:8080上运行webpack dev服务器,并且它没有问题地服务第一条路由,但是当我去localhost:8080 / test时,我得到一个Cannot GET /test

这是我的webpack配置:

var path = require('path');
var webpack = require('webpack');

module.exports = {
  devtool: 'eval',
  entry: [
    'webpack-dev-server/client?http://localhost:3000',
    'webpack/hot/only-dev-server',
    './client/app.jsx'
  ],
  output: {
    path: path.join(__dirname, ''),
    filename: 'bundle.js',
    publicPath: '/'
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new webpack.optimize.DedupePlugin(),
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify('production')
    }),
    new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false
      }
    })
  ],
   module: {
    loaders: [{
      test: /\.jsx?$/,
      exclude: /node_modules/,
      loader: "babel-loader",
      include: __dirname,
      query: {
        presets: [ 'es2015', 'react', 'react-hmre' ]
      }
    }]
  }
}

不确定我在这里做错了什么,不胜感激任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

React Router使用HTML5历史记录API。这意味着404响应需要提供/index.html

文档https://github.com/rs/SDWebImage。您需要将其添加到module.exports对象:

devServer: {
  historyApiFallback: true
}

请注意,这仅适用于CLI,在使用Node.js API时,您需要将其添加为第二个参数:

var server = new WebpackDevServer(compiler, { historyApiFallback: true });