【发布时间】:2021-06-06 20:47:36
【问题描述】:
我有一个 JSON 文件,其中包含多个脚本文件路径,我希望能够将这些脚本动态加载到我的 React 应用程序中,以根据元数据中的规范构建每个组件。目前,我的应用程序中的元数据作为 Metadata 数据对象。
元数据.json:
{
"component1": { "script": "./createFirstLayer.js" },
"component2": { "script": "./createSecondLayer.js" }
}
每个脚本都导出一个我希望能够用来构造组件的函数。出于故障排除的目的,它目前只返回一条简单的消息。
function createFirstLayer(name) {
return name + " loaded!";
}
export default createFirstLayer;
我做了一些研究并确定了@loadable/component 包。使用这个包作为import loadable from "@loadable/component";,我尝试将我的脚本加载到 App.js 中,如下所示:
async componentDidMount() {
Object.keys(Metadata).forEach(function(name) {
console.log(Metadata[name].script);
var createLayer = loadable(() => import(Metadata[name].script));
var message = createLayer(name);
console.log(message);
});
}
我尝试过的所有操作都会引发 TypeError createLayer is not a function。如何加载函数?
我也尝试过lazy 方法。
我重新创建了我的问题 here 的工作演示。
编辑:我试图把它放在我的应用程序的顶部
const scripts = {};
Object.keys(Metadata).forEach(async function(name) {
import(Metadata[name].script).then((cb) => scripts[name] = cb);
});
这会导致 TypeError Unhandled Rejection (Error): Cannot find module './createFirstLayer.js'。 (匿名函数) src/components 懒惰 /^.*$/ groupOptions: {} namespace object:66
我也试过
const scripts = {};
Object.keys(Metadata).forEach(async function(name) {
React.lazy(() => import(Metadata[name].script).then((cb) => scripts[name] = cb));
});
我的目标是能够调用适当的函数来创建特定层,并在元数据中匹配它们。
【问题讨论】:
标签: javascript reactjs dynamic loadable-component