reactjs - 使用动态模块进行代码分割?

标签 reactjs webpack commonjs code-splitting

我在 React 中使用 Webpack 的代码分割功能。我正在构建一个应用程序,用户将在其中选择一个选项,然后将呈现相应的 React 组件。但是,我发现使用 CommonJs require.ensure 仅适用于硬编码字符串。当我使用变量时,它似乎正在工作,组件会关闭。但是当我查看网络选项卡时,我发现它没有拆分代码 - 它没有加载任何新的包。当我进行硬编码时,每次都会调用一个新的包。

这是有效的:

executeDynamic(component){
    var that = this;
    switch(component){  
        case 'SolidButton':
            require.ensure([], function(require){
                DynamicModule = require(`./elements/SolidButton/index.js`);
                that.forceUpdate();
            });
            break;
        case 'ThreeDButton':
            require.ensure([], function(require){
                DynamicModule = require(`./elements/ThreeDButton/index.js`);
                that.forceUpdate();
            });
            break;
        case 'NoPreview':
            require.ensure([], function(require){
                DynamicModule = require(`./elements/NoPreview/index.js`);
                that.forceUpdate();
            });
            break;
        default:
            break;
    }       
}

这是我想要的工作:

executeDynamic(component){
    var that = this;
    require.ensure([], function(require) {
        DynamicModule = require(`./elements/${component}/index.js`);
        that.forceUpdate();
    });
}

最佳答案

我终于明白了!!我将动态 require 移至其自己的文件中,因此下面是我从 React 组件对该文件的调用,然后是文件的内容。您需要bundle-loader安装软件包来执行此操作。

所以这就是我进行调用的地方,传入 this 以及我想要加载的组件的名称。

loadLiveCode(that, component) {
    req(component, function(result) { 
        DynamicModule = result;
        that.forceUpdate();
    });
}

还有动态Require.js 文件,它保存了利用bundle-loader 的动态require 调用:

module.exports = function loadAsync(expr, callback) {
  var bundledResult = require("bundle!./elements/" + expr + "/index.js");
  bundledResult(function(result) { 
    callback(result); 
  });
};

关于reactjs - 使用动态模块进行代码分割?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39602389/

相关文章:

javascript - Browserify:你将如何读取目录的内容

reactjs - 如何在 typescript 和 antd 中使用 Form.create 和函数组件

javascript - VueJS 使用 prop 作为数据属性值

javascript - 如何在 webpack 中使用 node-sass-asset-functions?

javascript - Webpack/Node.js Http 模块 : http. createServer 不是函数

javascript - 如何在Intellij中jsDoc Node module.exports对象方法?

javascript - 如何在没有模块声明的情况下导入 Typescript

reactjs - 如何检查 React 元素是否会渲染任何内容

reactjs - react : avoid controlled component boilerplate

javascript - 如何查找 reactJS 错误?