版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

1、组件

...

概述:

染模块中会有对应的render方法将组件逻辑渲染出来,最终注册到编辑器、渲染引擎使用。但组件的构建需要依赖default-setting、用户信息等数据支持,所以在构建组件之前需要创建一个上下文,提供此类数据给组件使用。

1、DependencyContext 上下文

...

注意:

DependencyContext只能提供给template、setting模块相关组件使用(main模块为PReact构建,所以无法正常调用)。

template模块中,还需要对可编辑组件,和可编辑元素进行对应的上下文注入。

2、withDependencyContext  高阶组件

main模块使用withDependencyContext方法进行上下文关联

3、示例

1、上下文的注入可查看各个模块创建详细示例,

点击查看template模块创建

点击查看setting模块创建

点击查看main模块创建

2、组件中上下文的获取可查看各个模块组件创建详细示例

点击查看template组件创建

点击查看setting组件创建

点击查看main组件创建

2、组件

1、概述

  • 组件分为俩种,编辑器编辑型组件,渲染引擎渲染型组件。
  • 构建编辑器中可编辑基础元素由两部分构成,基础元素组件、可编辑方法,可编辑方法会提供编辑能力赋予基础组件,基础组件负责渲染。

2、组件介绍

1、template模块下编辑型组件创建
6
6

编辑型组件分为两种,可编辑组件、可编辑元素。

1、图示


2、可编辑组件

  • withEditableComponent  可编辑组件高阶组件,可生成可编辑组件
  • 可编辑组件上下文注入(上下文注入点击查看可编辑组件上下文注入(查看 context 上下文

3、可编辑元素

  • withEditableElement 可编辑元素高阶组件
  • 可编辑元素上下文注入(上下文注入点击查看可编辑元素上下文注入(查看 context 上下文
  • 可编辑元素根据不同的元素配置进行组件渲染,可编辑元素组件列表:

可编辑元素组件(名称不固定)

基础元素组件

基础元素引用

可编辑方法

可编辑方法引用

EditableImage

Image

@fe-plugin/components/lib/templates/cmps/image

withEditableImage

(key):void

EditableButton

Button

withEditableButton(key):void

EditableText

<p> 标签

withEditableText(key):void

EditableDialog

Dialog

withEditableDialog(key):void

...

构建一个拥有可编辑组件、可编辑按钮元素的template模块下编辑型组件。

...

title创建编辑器可编辑组件
linenumberstrue

...

import {

withEditableImage,

withEditableButton,

withEditableText,

withEditableDialog,

withEditableInput,

withEditableTextarea,

withEditableFileUploader,

withEditableShape

} from "@fe-plugin/components/lib/templates/editable-element";

...

渲染引擎渲染组件,有main模块引用,需要与编辑器可编辑组件对应渲染,并且需要附加逻辑。

组件名称组件参数引入模块Button
data:ComponentElementModel element元素配置

EditableButton

Button

@fe-plugin/components/lib/templates/cmps/button

...

withEditableButton

EditableText

<p>、<article>标签

原生标签

withEditableText

EditableDialog

Dialog

@fe-plugin/components/lib/
h5
templates/cmps/
buttonImage
dialog

withEditableDialog

EditableInput

Input@fe-plugin/components/lib/
h5
templates/cmps/
imageText
inputwithEditableInput

EditableTextarea

Textarea@fe-plugin/components/lib/
h5
templates/cmps/
textDialog
textareawithEditableTextarea

EditableFileUploader

FileUploader@fe-plugin/components/lib/
h5
templates/cmps/
confirm
file-
dialog
uploader

...

withEditableFileUploader

...

title创建一个渲染按钮
linenumberstrue

...

EditableShape

Shape@fe-plugin/components/lib/

...

templates/cmps/

...

3、编辑器设置面板公用组件

...

shapewithEditableShape

4、示例:

构建可编辑组件、可编辑元素

...

template、main模块中存在的弹出层模块,称之为内置页,可做组件的弹出层逻辑渲染。

...

1、template组件中的内置页

内置页在template模块中创建使用可编辑型组件创建。

示例:termplate模块中内置页的创建

代码块
titletemplate模块内置页创建创建编辑器可编辑组件
linenumberstrue
import React from "react";
import {
  withEditableButton,
  withEditableDialog,
withEditableComponent } from "@fe-plugin/components/lib/templates/editable-element";
import { getComponentInfo } from "@fe-plugin/common/lib/component-info";
import { getElementByKeywithEditableText } from "@fe-plugin/common/lib/component-element";
import BaseDialog from "@fe-plugin/components/lib/templates/cmps/dialogeditable-element";
import BaseButton from "@fe-plugin/components/lib/templates/cmps/button";
import * as ELEMENT_KEY from "constants/element-keys";


// 编辑器舞台编辑组件
class InlinePage extends React.Component {
  //获取上下文
  static contextType = DependencyContext;

  render() {
    const { config } = this.context;

    // 获取信息,并创建获取element的方法
    const componentInfo = getComponentInfo(config);
    const getElement = (type) => getElementByKey(componentInfo.elements, type);

    // 获取弹窗元素
    const dialogElement = getElement(ELEMENT_KEY.POPUP_DIALOG);

    创建一个可编辑组件
const EditableComponent = withEditableComponent();

// 根据元素配置的key值创建一个可编辑元素
    const EditableButton = withEditableDialog(ELEMENT_KEY.ButtonwithEditableButton("元素key值")((element) => {
      return <BaseButton data={element} style={element.style} />;
    });

    const EditableDialog = withEditableButton(ELEMENT_KEY.Dialog)((element) => {
      // 编辑器组件的渲染(一个带有可编辑按钮元素的组件)
function EditerCmpRender() {
  return (
        <BaseDialog data={element}>
    <EditableComponent>
      <EditableButton />
        </BaseDialog>EditableComponent>
      );
    });

    return (
      <Dialog name={ELEMENT_KEY.POPUP_DIALOG}>
        <EditableDialog />
      </Dialog>
    );
  }
}

export default InlinePage;

...

2、main组件中的内置页

内置页在main模块中的创建使用渲染型组件创建。

示例:main模块中内置页的创建

...

title可弹出内置页渲染
linenumberstrue

...

}


2、main模块下渲染型组件创建
7
7

渲染引擎渲染组件,有main模块引用,需要与编辑器可编辑组件对应渲染,并且需要附加逻辑。

基础组件名称渲染组件引入
Button

@fe-plugin/components/lib/h5

...

/cmps/button

Image

@fe-plugin/components/lib/h5

...

/cmps/image

Text

@fe-plugin/

...

3、渲染

了解组件的类型,与创建后,不同模块最终需要对组件进行组合,形成最终的渲染。

...

引入main模块上下文(点击查看main模块的创建

创建渲染组件(点击查看渲染型组件创建

内置页的引用(点击查看main模块下内置页创建

示例:创建一个main组件

...

titlemain组件
linenumberstrue

...

components/lib/

...

h5/cmps/text

Dialog

@fe-plugin/components/lib/

...

h5/cmps/Dialog
Input@fe-plugin/

...

引入template模块上下文(点击查看template模块的创建 

创建可编辑组件(点击查看编辑型组件创建

内置页的引用(点击查看template模块下内置页创建

示例:创建一个template组件

...

titlemain组件
linenumberstrue

...

components/lib/

...

h5/cmps/input
Textarea
@fe-plugin/components/lib/

...

h5/cmps/textarea
FileUploader@fe-plugin/components/lib/h5/

...

cmps/

...

file-uploader
公共组件名称渲染组件引入
ConfirmDialog 确认弹窗

@fe-plugin/components/lib/

...

h5/

...

confirm-dialog

QrCode 二维码组件@fe-plugin/components/lib/

...

h5/qrcode
示例:

...

渲染setting模块需要以下步骤:

1、在default-setting中将 hasComponentSetting 设置为 true

2、在模块入口传入onChange、initValue参数,提供数据初始化,数据更改等功能(点击查看模块入口)

...

代码块
titlemain组件创建一个渲染按钮
linenumberstrue
import React from "react";
import {Button DependencyContext } from "@fe-plugin/components/lib/context";
import { getComponentInfo } from "@fe-plugin/common/lib/component-info";
import { withEditableComponent } from "@fe-plugin/components/lib/templates/editable-component";
import { withEditableButton } from "@fe-plugin/components/lib/templates/editable-element";
import BaseButton from "@fe-plugin/components/lib/templates/cmps/button";
import * as ELEMENT_KEY from "constants/element-keysh5/cmps/button";

// 创建一个可编辑组件
constexport EditableComponentdefault =function withEditableComponentRenderButton(props);

// 编辑器舞台编辑组件
class Template extends React.Component {
  //获取上下文
const handleClick static= contextType() => DependencyContext;{

  // 渲染组件
  renderCmp() { console.log("处理按钮的点击事件");
  };
  // 根据元素配置的key值创建一个可编辑元素
    const EditableButton = withEditableButton(ELEMENT_KEY.Button)((element) => {从外部到element元素数据 填充
      return <BaseButton<Button data={props.element} styleonClick={element.stylehandleClick} />;
    });

    return (
      <EditableComponent>
        <div>
          <EditableButton />
        </div>
      </EditableComponent>
    );
  }
}

export default Template;}


3、编辑器设置面板公用组件

(待补充)