小编Alf*_*les的帖子

在 React Router Routes 中动态注入数据

我一直在尝试模块化我的 React.js 应用程序(它将作为带有 Electron 的桌面应用程序交付),如果我将来创建一个新模块,我只需添加一个新文件夹并修改一个几个文件,它应该可以很好地集成。我最初受到这篇文章的启发:https : //www.nylas.com/blog/react-plugins/

在那之后,我开始尽可能多地进行研究,最终创建了一个 JSON 文件,该文件将存在于服务器中,其中包含为该特定客户端注册的插件清单。像这样的东西:

{
    "plugins": [
        {
            "name": "Test Plugin",
            "version": "0.0.1",
            "path": "testplugin",
            "file": "test",
            "component":"TestPlugin"
        },
        {
            "name": "Another Plugin",
            "version": "0.0.1",
            "path": "anothertest",
            "file": "othertest",
            "component":"TestPluginDeux"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

之后,我创建了几个与path值匹配的文件夹,其中包含一个与清单中的名称匹配的组件(例如testplugin/test.jsx,将TestPlugin组件导出为默认值)。我还制作了一个pluginStore文件,用于读取清单并将插件安装在this.state.

然后,在谷歌和这里做了大量研究并找到了这个答案:React - Dynamically Import Components

使用该函数,我能够遍历清单,找到目录中的文件夹,并this.state通过运行mountPlugins()我在主页中pluginStorecomponentDidMount()方法中创建的函数来安装插件。

到现在为止还挺好。我使用的阵营,路由器和我能够在国家动态地安装插件,并能够通过只要求他们这样加载它们在我的主页路线:<TestPlugin />

我现在遇到的问题是,我想动态创建路由,通过使用componentrender方法从状态加载这些组件,但我没有运气。我总是会得到相同的结果......显然我传递的是一个对象而不是一个字符串。

这是我在这次尝试中的最后一次迭代:

{this.state.modules.registered.map((item) =>
<Route exact …
Run Code Online (Sandbox Code Playgroud)

javascript modularization reactjs react-router

6
推荐指数
1
解决办法
4744
查看次数