web架构师编辑器内容-数据结构设计上面的难点

这篇具有很好参考价值的文章主要介绍了web架构师编辑器内容-数据结构设计上面的难点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 组件的属性应该怎样设计

业务组件分为:样式属性和其他属性,样式属性就是css,其他属性拿文本来说,就是比如test还有点击事件等。
有两种方案:
方案一:把css作为统一的对象传入:

  <LText css={{color: 'fff'}} text="nihao"/>
  <p style={props.css}></p>

方案二:将所有的属性全部平铺传入

  <LText text="hello" color="#fff" />
  const styles = stylePick(props)
  <p style={style}></p>

  // 对于一些公用属性,比如 L-text和l-image都有一个页面跳转的公共行为,
  // 在组件中我们要抽离出公共的函数
  import useClick from 'useCLick'
  useClick(props)

这两种方案,第二种方案相比于第一种比较好,第一种使用内部实现简单,但是保存的时候需要多保存一层结构,后端可能也需要多保存一层结构,并且我们在更新数据的时候还要区分css属性还是其他属性,做一个区分,方案二内部实现比较复杂一些,但是保存的时候比较好保存,我们平铺就可以进行保存,在更新数据的时候也不需要甄别。

  1. 编辑器的难点

分为三个部分,左侧是业务组件的模板库:文本,图片,形状,中间是画布,可以对元素进行一些修改,右侧是设置面板
编辑器是围绕着画布进行一系列的操作。元素抽象成一个拥有特定结构的数组。如何将画布上面选中的元素,映射到右侧面板中的属性设置,并且进行更新是一个比较复杂的事情:

// 整个编辑器使用一个store来实现具体功能,总体设计如下
export interface EditorProps {
  // 供中间编辑器渲染的数组
  components: ComponentData[];
  // 当前编辑的是哪个元素,uuid
  currentElement: string;
  // 当然最后保存的时候还有有一些项目信息,这里并没有写出,等做到的时候再补充
}
export interface ComponentData {
  // 这个元素的 属性,属性请详见下面
  props: {[key: string]: any};
  // id,uuid v4 生成
  id: string;
  // 业务组件库名称 l-text,l-image 等等 
  name: string;
}

// 渲染画布:
const compoents = [
  { id: '1', type: 'l-text', props: {text: 'hello', color: 'green'}},
  { id: '2', type: 'l-text', props: {text: 'hello2', color: 'purple'}},
]
compoents.map(componet => <compoent.name {...props} />)

// 渲染左侧模板
compoents.map(componet => <wrap><compoent.name {...props} /></wrap>)

// 添加删除元素
// 添加元素,在左侧模板,直接在 components中添加元素,
compoents.push({ id: '3', type: 'l-text', props: {text: 'hello2', color: 'purple'}},)
// 属性元素,在画布里面执行删除事件
components = components.filter(compoent => compoent.id !== id)

// 将选中的值渲染到右侧画布中去:
const currentCompoentProps = {
  text: '123',
  color: '#fff',
  imgUrl: ''
}

将选中的元素currentCompoentProps映射到右侧面板设置中的属性设置中有以下方案:文章来源地址https://www.toymoban.com/news/detail-814396.html

  • 方案一:
// 伪代码,最终产生的效果是这样的:
<input value={text} />
<color-picker value={color} />
<img url={imgUrl}/>
// 这样写的话,有以下一些缺点:
 1. 比较冗长,如果有100个不同的属性,后面可能要写100个不同的组件,
 2. 不同类型的业务组件都要做不同的判断
 if type === 'text'
 <input value={text} />
 <color-picker value={color} />
 else if type === 'image'
 3. 可扩展性比较差。
 如果我们后面添加新的业务组件,就要写更多的if else
  • 另一个实现方案:界面的UI,就是数据的抽象,所以我们自然想到的就是使用特定的数据结构将他渲染成就界面。
 const textComponentProps = {
  text: 'hello',
  fontFamily: 'Heiti',
  color: '#fff'
 }
 const propsMap = {
  text: {
    component: 'input'
  },
  fontFamily: {
    component: 'dropdown'
  },
  color: {
    component: 'color-picker'
  }
 }

 map(textComponentProps, (key, value) => {
  const hanldeChange = (propKey, newValue, id) => {
    const updateComponent = store.components.find(component.id === id)
    updateComponent.props[propKey] = newValue
  }
  <propsMap[key].component value={value} @change={hanldeChange}/>
 })

到了这里,关于web架构师编辑器内容-数据结构设计上面的难点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React 框架下自己写一个braft编辑器,然后将编辑器内容展示在网页端

    1.首先自己写一个编辑器 输入文字; 支持选择表情; 可添加小程序链接;可添加网页链接;并且可以编辑删除;效果如下 2.输入完毕后,点击文本输入框保存,将便携式内容回显, 渲染时,因为是html格式,所以采用dangerouslySetInnerHTML属性来渲染 添加样式,渲染后里面的链接

    2024年02月16日
    浏览(42)
  • AJAX + PHP 编辑器内容自动备份草稿保存到本地 (适用ueditor百度编辑器或其它) 内容变化后自动触发备份txt文件

    百度自带的自动备份功能enableAutoSave存在问题, 比如第一个文章他自动备份了.等发表第二个文章时,结果把第一个文章的内容自动填充进去了.关键你还不知情!出现过多次这种情况了. 一, 百度原版的 ,具体使用方法,看这里个文章 Ueditor百度编辑器内容自动保存到本地防数据丢失

    2024年02月10日
    浏览(41)
  • 【HTML】标签读取富文本编辑器的内容

    1.正确读取富文本内容示例: 代码:  显示结果:  在这个例子中, {$row.content}  是直接输出从数据库中获取的富文本内容,包括可能存在的HTML标签和属性,这样可以确保富文本能够按照预期样式呈现。 2. 错误读取富文本内容示例及其原因分析:  代码:  显示结果: 分析

    2024年02月02日
    浏览(37)
  • 工业组态 物联网组态 组态编辑器 web组态 组态插件 编辑器

     体验地址:by组态[web组态插件] BY组态是一款非常优秀的纯前端的【web组态插件工具】,可无缝嵌入到vue项目,react项目等,由于是原生js开发,对于前端的集成没有框架的限制。同时由于BY组态只是一个插件,不能独立运行,必须嵌入到你方软件平台才能使用,所以你方软件

    2024年04月15日
    浏览(34)
  • 利用三维内容编辑器制作VR交互课件,简单好用易上手

    随着虚拟现实技术的不断发展,越来越多的教育机构开始尝试将其应用于教育教学中。然而,要实现这一目标并不容易,需要专业的技术支持和开发团队。 为了解决这一问题, 广州华锐互动 研发了 三维内容编辑器 ,它是一种基于虚拟现实技术的教育内容编辑器,可以帮助

    2024年02月12日
    浏览(32)
  • 最火web大屏可视化编辑器

           乐吾乐Le5le大屏可视化设计器,零代码实现物联网、工业智能制造等领域的可视化大屏、触摸屏端UI以及工控可视化的解决方案。同时也是一个Web组态工具,支持2D、3D等多种形式,用于构建具有实时数据展示、监控预警、丰富交互的组态画面。拥有丰富的大屏组件和行

    2024年02月05日
    浏览(37)
  • 老牌开源 SVG 编辑器 SVGEdit 是如何架构的?

    大家好,我是前端西瓜哥。这次简单看看 SVGEdit 的架构。 SVGEdit 的版本为 7.2.0。 SVGEdit 一款非常老牌的 SVG 图形编辑器,用于编辑处理 SVG,start 数目前是 5.8k。 它的优点在于经过多年的开发,完成度高,较为成熟,功能相当丰富 。 有丰富的工具:选择工具、铅笔工具、钢笔

    2024年02月03日
    浏览(32)
  • JAVA在线电子病历编辑器源码 B/S架构

    电子病历在线制作、管理和使用的一体化电子病历解决方案,通过一体化的设计,提供对住院病人的电子病历书写、保存、修改、打印等功能。电子病历系统将临床医护需要的诊疗资料以符合临床思维的方法展示。建立以病人为中心,以临床诊疗信息为主线,集成门急诊、住

    2024年02月07日
    浏览(25)
  • 界面控件DevExpress WinForms/WPF v23.2 - 富文本编辑器支持内容控件

    众所周知内容控件是交互式UI元素(文本字段、下拉列表、日期选择器),用于在屏幕上输入和管理信息。内容控件通常在模板/表单中使用,以标准化文档格式和简化数据输入。DevExpress文字处理产品库(Word Processing Document API、WinForm和WPF富文本编辑器)附带了内容控制支持(v23

    2024年04月15日
    浏览(36)
  • 23 WEB漏洞-文件上传之解析漏洞编辑器安全

    各个WEB编辑器安全讲解 https://navisec.it/编辑器漏洞手册/ 各个CMS文件上传简要讲解 wordpress,phpcms, 参考共享的中间件漏洞PDF IIS6/7简要说明-本地搭建 Apache配置安全–vulhub Apache解析漏洞-低版本 利用场景: 如果对方中间件apache属于低版本,我们可以利用文件上传,上传一个不识

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包