DTStack / molecule

:rocket: A lightweight Web IDE UI framework.

Home Page:https://dtstack.github.io/molecule/

Repository from Github https://github.comDTStack/moleculeRepository from Github https://github.comDTStack/molecule

MenuBar是否支持渲染自定义组件?比如一个Select选择框

resetsix opened this issue · comments

Question

我在官网查看MenuBar的render方法,发现返回值是一个void,貌似不支持渲染自定义组件。需求就是在 MenuBar 中渲染自定义组件请问还有其他方案吗?

下图为官网类型文档

图片

下图为想要实现的MenuBar效果

图片

想要实现在 MenuBar 菜单栏中渲染 Select 选择框,或是弹出一个 Drawer 抽屉。(我不知道如何在类组件中保存抽屉的开关状态,一般都是函数组件+hook方式,所以还想请教一下)

目前 Menubar 这一块确实不支持自定义。如果真的想要实现的话,可能得自定义 workbench 了,这一块工作量比较大且后续维护起来会比较困难。主要实现思路如下:

  1. const App = () => moInstance.render(<Workbench />); 的地方,这里的 Workbench 不引用 Molecule 导出的,而是自定义一个 Workbench 的组件
  2. 自定义的这个 Workbench 组件,需要实现 https://github.com/DTStack/molecule/blob/57804b644880336cdcb6587d4f7517503ded9f62/src/workbench/workbench.tsx 相关功能(这里建议复制粘贴)
  3. 然后基于上述自定义的 Workbench 组件就可以去自定义 MenuBar 或者其他组件了。

以上方案的优点在于自由度高,可定制化所有组件的逻辑。但是缺点也很明显,后续可维护性大大降低,而且工作量蛮大的。还需要自行根据需要斟酌一下。

目前 Menubar 这一块确实不支持自定义。如果真的想要实现的话,可能得自定义 workbench 了,这一块工作量比较大且后续维护起来会比较困难。主要实现思路如下:

1. 在 `const App = () => moInstance.render(<Workbench />);` 的地方,这里的 Workbench 不引用 Molecule 导出的,而是自定义一个 Workbench 的组件

2. 自定义的这个 Workbench 组件,需要实现 https://github.com/DTStack/molecule/blob/57804b644880336cdcb6587d4f7517503ded9f62/src/workbench/workbench.tsx   相关功能(这里建议复制粘贴)

3. 然后基于上述自定义的 Workbench 组件就可以去自定义 MenuBar 或者其他组件了。

以上方案的优点在于自由度高,可定制化所有组件的逻辑。但是缺点也很明显,后续可维护性大大降低,而且工作量蛮大的。还需要自行根据需要斟酌一下。

原来如此,明白了