【问题标题】:react-router 4 doesn't display componentsreact-router 4 不显示组件
【发布时间】:2017-09-21 20:52:01
【问题描述】:

我的 react-redux 应用中有 2 条路由:

ReactDOM.render(

<Provider store={store}>
    <BrowserRouter>

        <div>
            <Route path = '/a' component = {ContainerComponent} />
            <Route path = '/b' component = {ContainerComponent} />
        </div>      

    </BrowserRouter>
</Provider>, 

document.getElementById('app'));

我的 webpack 配置:

var HTMLWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

var HTMLWebpackPluginConfig = new HTMLWebpackPlugin({
    template: __dirname + '/app/index.html',
    filename: 'index.html',
    inject: 'body'
});

module.exports = {
    entry:  __dirname + '/app/index.js',
    module: {
        loaders: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'babel-loader'
            }, {
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: 'css-loader?modules,localIdentName="[name]-[local]-[hash:base64:6]"'
                })
            }]
    },
    output: {
        filename: 'transformed.js',
        path: __dirname + '/build'
    },
    devServer: {

        historyApiFallback: true

    },
    plugins: [
        HTMLWebpackPluginConfig,
        new ExtractTextPlugin('styles.css')
    ]
};

【问题讨论】:

  • 我很好奇那些教程,它解释了组合 url 路径同时呈现多个组件。据我所知,您的行为是预期的和适当的。
  • 这是不可能的。就像@Dez 说的那样,我也对那些通过加入两条路线来呈现多个组件的教程感兴趣。
  • @Dez 例如youtube上的这个(7:00 - 7:20):youtube.com/watch?v=l9eyot_IXLY。我只是在重复他的动作。
  • 哦,我明白你想要达到什么目的了。
  • @John Kennedy 我的最终目标是在修改 URL 字符串(添加 JWT 令牌)后将渲染组件保留在屏幕上。目前,在向当前 URL 添加一些字符后,我的组件消失了(错误)。这就是为什么我有兴趣重复这里所做的事情:youtube.com/watch?v=l9eyot_IXLY 7:00 - 7:20,但由于某种原因它对我不起作用......

标签: reactjs react-router react-redux react-router-v4 react-router-dom


【解决方案1】:
ReactDOM.render(

<Provider store={store}>
    <BrowserRouter>

        <div>
            <Route path = '/a' component = {ContainerComponent} />
            <Route path = '/b' component = {ContainerComponent} />
            <Route path = '/a/b' component = {ContainerComponent} />

        </div>      

    </BrowserRouter>
</Provider>, 

document.getElementById('app'));

您还需要定义第三条路线。由于路径匹配的功能,在不使用exact 参数的情况下,BrowserRouter 将匹配定义的路径与浏览的 URL 匹配的尽可能多的路由。在这种情况下,使用 URL /a,您将获得两个呈现的组件。但是,如果您浏览 URL /a/b,则唯一匹配该路径的路由是第三个。因为你没有在你的代码中定义你会得到一个正确的 404 错误。

【讨论】:

【解决方案2】:

好的,最后通过修改webpack.config.js解决了问题。替换为:

output: {
    filename: 'transformed.js',
    path: __dirname + '/build',
},

用这个:

output: {
    filename: 'transformed.js',
    path: __dirname + '/build',
    publicPath: '/'
},

【讨论】:

  • 我想知道您的路由器的addingbasename='/' 也适用于您的情况。
猜你喜欢
  • 2020-01-23
  • 2017-08-29
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
相关资源
最近更新 更多