【发布时间】:2016-11-09 10:01:49
【问题描述】:
所以情况 - 我想创建将利用 React 和用户\第 3 方构建的组件(小部件)的应用程序\框架。我目前的观点是,我将拥有一个 Root 组件,该组件将列出已加载的 3rd 方组件。像这样:
class Root {
constructor(p){
this.state = {loadedWidgets: [<Chat/>, <Mail/>, <Notes/>]}
}
render(){
return(
<div>
<Header/>
<Body>
{this.state.loadedWidgets.map(WidgetName => <WidgetName />)}
</Body>
</div>
)
}
}
但我遇到了两个我无法理解或无法解决的主要问题:
- 如果我不应该将这些小部件硬编码到根组件中,我将如何加载(导入)它们? (我想我可以做一些钩子,以便在用户安装小部件后,它会以某种方式添加到状态和页面)
- 为什么 React 不以这种方式渲染真实组件:
(代码标签正常工作的列表结束)
render(){
const NameOfACustomComponent = this.state.loadedWidgets[0]
return(<div><NameOfACustomComponent/></div>
}
渲染后它将是一个自定义的 DOM 标签,而不是现有的 React 组件。
我想要构建的是 chrome 的扩展,用用户经常使用的小部件\应用程序替换新页面,同时让开发人员可以使用纯 React.js 以足够简单的方式添加新的小部件和一些用于集成的钩子。
编辑。根据this issueReact 找到第二个问题的答案,如果您引用了它的类或函数(ES5 React 风格),则允许制作任意组件。因此,对于第 2 和第 1 个问题的解决方案之一是在窗口对象中有一些注册表,其中任何组件都可以自行添加并可供框架使用。虽然它应该以严格的类实例方式完成,以提供一种方法来添加\删除仅 Widget 本身而不是它们的整个列表。
【问题讨论】:
-
第三方组件是用 React 做的吗?
标签: javascript reactjs frameworks