编辑器的实现思路是:编辑器生成页面 JSON 数据,服务端负责存取 JSON 数据,并生成对应的模版文件 .jsx ,渲染时从服务端取数据 JSON 交给前端模板 .jsx 处理。html
interface INode {
type: string
props: {
style: CSS.Properties;
// 空格间隔的应用于『组件顶层』的『样式列表』
className: string;
[key: string]: any;
}
children: INode[] | null
}
复制代码
前端在项目处理: 存入Map 单向链表 将其扁平化 Map<string,Node>前端
interface INode {
id:string
type: string
canDrag:boolean // 是否absolute支持拖拽
display:boolean // 是否在画布中展示出来
props: {
style: CSS.Properties;
// 空格间隔的应用于『组件顶层』的『样式列表』
className: string;
[key: string]: any;
}
children: string[] | null
}
复制代码
编辑器核心代码,经过获取 JSON 上对应的 componentName 加载对应的组件mysql
import React from 'react';
import { PhotoStory, VideoStory } from './stories';
const components = {
photo: PhotoStory,
video: VideoStory
};
function Story(props) {
const SpecificStory = components[props.storyType];
return <SpecificStory story={props.story} />;
}
复制代码