使用 React 构建页面可视化搭建工具

2020-06-27 23:38:27 +08:00
 custw

前言

端午闲来无事,决定尝试下一个页面搭建工具。效果如下:

可以访问以下链接进行体验。

技术栈

思路

  1. 定义页面数据结构

既然是可视化页面搭建,那么页面必须可以以某种数据结构进行描述。比如:

{
    setting: {}; // 页面设置
    components: [] // 页面使用到的组件
}
  1. 定义组件数据结构

页面核心是由组件搭建而成的,那么就要定义组件的数据结构。

{
    name: "BaseTitle"
    props: {}
    schema: {}
}

组件都是 React 组件,这里保存组件的名称,前端渲染时,通过名字找到组件,进行渲染。

  1. 如何进行组件编辑

进行组件编辑,实际上编辑的是组件的 propsprops 改变组件的渲染结果自然改变。为了对 props 进行编辑,需要定义 props 的描述语言,通过 props 描述来进行属性编辑。这里使用如下的 schema

{
    title: "标题"
    type: "text"
}

对应组件 props.title,通过 type 可以决定如何渲染编辑器组件。

  1. 丰富功能

比如添加组件拖拽排序功能。

  1. 丰富函数

可能光能渲染组件是不够的,也许需要更多的功能包装,比如埋点。这一类函数本质上也是组件。可以通过 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'
  }
};

代码开源在 点击访问

5190 次点击
所在节点    程序员
5 条回复
szdubinbin
2020-06-28 01:10:03 +08:00
云凤蝶 哈哈
szdubinbin
2020-06-28 01:22:51 +08:00
已 star
custw
2020-06-28 12:07:48 +08:00
@szdubinbin 和云凤蝶肯定没法比
taowen
2020-07-30 08:03:46 +08:00
custw
2020-07-30 14:25:36 +08:00
@taowen awesome

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/685143

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX