可视化编辑器里怎么动态加载自定义组件库?

司空庆玲 阅读 33

我在做可视化拖拽编辑器,想让用户能选我们封装好的业务组件,但这些组件是异步加载的。试过用 React.lazy 包裹,结果报错说不能在 Suspense 外使用。

现在卡在这儿了,有没有不用 Suspense 也能动态注册组件的方法?比如手动维护一个组件映射表?类似这样:

const componentMap = {
  Card: dynamic(() => import('./Card')),
  Banner: dynamic(() => import('./Banner'))
};
// 然后在渲染时根据类型取出来用
我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
迷人的弯弯
React.lazy 必须配合 Suspense 这事绕不开,你可以在编辑器外层统一包一个,或者干脆不用 lazy,直接预加载:

// 预先加载所有组件,存到 Map 里
const componentCache = new Map();

export const registerComponent = async (name, importFn) => {
const module = await importFn();
componentCache.set(name, module.default);
};

// 初始化时注册
registerComponent('Card', () => import('./Card'));
registerComponent('Banner', () => import('./Banner'));

// 渲染时直接取
const Render = ({ type, props }) => {
const Component = componentCache.get(type);
return Component ? : null;
};


或者简单点,编辑器顶层直接包个全局 Suspense 最省事,反正可视化编辑器本身就要 loading 状态的。
点赞 1
2026-03-11 18:00