todo
编辑器的实现思路是:编辑器生成页面 JSON 数据,服务端负责存取 JSON 数据,并生成对应的模版文件 .jsx ,渲染时从服务端取数据 JSON 交给前端模板 .jsx 处理。
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 加载对应的组件
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} />; } 复制代码