react中使用webpack配置bundle-loader进行异步加载失效

发布于 2022-09-06 10:28:56 字数 1997 浏览 9 评论 0

一开始,是通过下面这种办法进行异步加载组件:

import First from 'bundle-loader?lazy&name=[name]!./container/first/first.jsx';

const FirstContainer = () => (
        <BundleLoader load={First}>
            {(Children) => <Children/>}
        </BundleLoader>
    )
    
ReactDOM.render(
    <HashRouter>
        <div>
            <Switch>
                <Route path="/" exact component={Default} />
                <Route path="/first" component={FirstContainer} />
            </Switch>
        </div>
    </HashRouter>,
    document.getElementById("root"))

如果项目有很多组件,都用这种方式加载,那就是这样:

import First from 'bundle-loader?lazy&name=[name]!./container/first/first.jsx';
import Second from 'bundle-loader?lazy&name=[name]!./container/second/second.jsx';
import Third from 'bundle-loader?lazy&name=[name]!./container/third/third.jsx';
.......................
.......................

然后发觉这种方式优点麻烦,就想通过在webpack中bundle-loader统一配置,如下:

{
    test: /\.(jsx)$/,
    include: path.resolve(__dirname,"./src/container/**/"),
    use: [
        {
            loader: "bundle-loader",
            options: {
                lazy: true,
                name: '[name]'
            }
        }
    ]
},

那么,其它地方不变,加载组件的方式就如下:

import First from './container/first/first.jsx';

//下面和上面一致,没有变动
const FirstContainer = () => (
        <BundleLoader load={First}>
            {(Children) => <Children/>}
        </BundleLoader>
    )
    
ReactDOM.render(
    <HashRouter>
        <div>
            <Switch>
                <Route path="/" exact component={Default} />
                <Route path="/first" component={FirstContainer } />
            </Switch>
        </div>
    </HashRouter>,
    document.getElementById("root"))

但是页面加载不出来组件,请问什么原因?如何正确配置?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文