編輯器的實現思路是:編輯器生成頁面 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} />;
}
複製代碼