端午闲来无事,决定尝试下一个页面搭建工具。效果如下:
可以访问以下链接进行体验。
既然是可视化页面搭建,那么页面必须可以以某种数据结构进行描述。比如:
{
setting: {}; // 页面设置
components: [] // 页面使用到的组件
}
页面核心是由组件搭建而成的,那么就要定义组件的数据结构。
{
name: "BaseTitle"
props: {}
schema: {}
}
组件都是 React 组件,这里保存组件的名称,前端渲染时,通过名字找到组件,进行渲染。
进行组件编辑,实际上编辑的是组件的 props
,props
改变组件的渲染结果自然改变。为了对 props
进行编辑,需要定义 props
的描述语言,通过 props
描述来进行属性编辑。这里使用如下的 schema
。
{
title: "标题"
type: "text"
}
对应组件 props.title
,通过 type
可以决定如何渲染编辑器组件。
比如添加组件拖拽排序功能。
可能光能渲染组件是不够的,也许需要更多的功能包装,比如埋点。这一类函数本质上也是组件。可以通过 schema
定义进行 props
编辑。举个例子:
import React from 'react';
export const Tracking = ({ op, pageSn, pageElSn, children }) => {
const onClick = () => {
alert('埋点测试:' + op + '_' + pageSn + '_' + pageElSn);
};
return <div onClick={onClick}>{children}</div>;
};
Tracking.defaultProps = {
op: 'click',
pageSn: null,
pageElSn: null
};
Tracking.schema = {
op: {
title: '曝光方式',
type: 'radio',
options: ['click', 'pv']
},
pageSn: {
title: '页面编号',
type: 'number'
},
pageElSn: {
title: '元素编号',
type: 'number'
}
};
代码开源在 点击访问。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.