【问题标题】:Reactjs dynamic components loading factoryReactjs 动态组件加载工厂
【发布时间】:2016-03-10 16:28:07
【问题描述】:

我在单独的文件中有几个 reactjs 组件(让它成为一个窗口),例如:

windows/window1.jsx
windows/window2.jsx
...
windows/windowN.jsx

我还有一个名为“WindowManager”的组件,我想用它来快速调用代码中任何位置的任何窗口。

现在我应该像这样在 WindowManager.jsx 中存储所有可能的窗口:

var windowsTypes = {
    window1        : require('windows/window1.jsx'),
    window2        : require('windows/window1.jsx'),
    ...
    windowN        : require('windows/windowN.jsx')
}

...然后这样称呼它:

WindowManager.addWindow(windowTypes.windowN, { ... custom windowN-related props ...});

如果我要添加一个新的窗口类型,那么我还应该在“windowsTypes”列表中添加一个新项目“windowN”:require(...),在我看来这不是很干燥的解决方案。我想要实现的是摆脱“windowsTypes”的必要性。

有什么干净的方法可以做到这一点吗?可能在其他插件和库的帮助下?

【问题讨论】:

标签: reactjs autoload react-jsx


【解决方案1】:

你为什么不简单地使用你的方法:

function addWindowExt(windowName, windowProps) // where windowName is string
{
    WindowManager.addWindow(require('windows/' + windowName + '.jsx'), windowProps);
}

不需要任何预先填充的地图。

【讨论】:

  • 它可以工作,但看起来很丑。如果您需要更改 windowN.jsx 的位置,您应该找到 windowN 的所有用法并更改它们。它似乎不是很干燥。
  • 如果您要更改 windowN.jsx 的位置,无论如何您都必须继续使用它(IDE​​ 可能会帮助您),并且至少更改否则将是的导入不管使用这种方法都坏了。而且我真的不明白这如何违反 DRY 原则。
猜你喜欢
  • 2020-01-09
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
相关资源
最近更新 更多