反应路由器+ webpack,子路由不起作用

Posted

技术标签:

【中文标题】反应路由器+ webpack,子路由不起作用【英文标题】:React router + webpack, sub routes not working 【发布时间】:2017-02-24 08:26:33 【问题描述】:

我正在尝试为我的应用程序设置我的路由器,并让基本/入口点正常工作(似乎)。似乎当我尝试开始添加子路由时,它正在中断。我现在有一个非常简单的设置。我正在使用 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 开发服务器,它服务于第一条路由没有问题,但是当我转到 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】:

React Router 使用 html5 历史 API。这意味着 404 响应需要服务于/index.html

文档mention how this works。您需要将此添加到您的 module.exports 对象中:

devServer: 
  historyApiFallback: true

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

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

【讨论】:

当我添加它并转到 /test 时,它不再给我一个 404,但它仍然只显示component=comp1.Component(不是我指定用于测试的那个。谢谢! 根据我的经验,您仍然需要使用斜杠,因此路径应该是/test。如果已修复此答案,您能否将其标记为已接受? 更改路径也不起作用。仍然显示错误的组件。 comp1.Component 文件中,你是在渲染孩子吗? comp2.Component 将呈现为一个孩子。在comp1.Component 中,您需要在render() 方法中添加this.props.children

以上是关于反应路由器+ webpack,子路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章

路由在 webpack + react 项目中不起作用

反应路由器dom v5默认路由不起作用

嵌套的 React 路由器 4 路由在 Webpack 3 上不起作用

反应路由器私有路由/重定向不起作用

为啥 webpack 构建后我的 react-routing 不起作用?

反应路由器重定向在私有路由中不起作用