...
代码块 | ||||
---|---|---|---|---|
| ||||
import React from "react"; import Button from "@fe-plugin/components/lib/h5/cmps/button"; export default function RenderButton(props) { const handleClick = () => { console.log("处理按钮的点击事件"); }; //从外部到element元素数据 填充 return <Button data={props.element} onClick={handleClick} />; } |
2、渲染
了解组件的类型,与创建后,不同模块最终需要对组件进行组合,形成最终的渲染。
...
引入main模块上下文(点击查看main模块的创建)
创建渲染组件(点击查看渲染型组件创建)
内置页的引用(点击查看main模块下内置页创建)
示例:创建一个main组件
代码块 | ||||
---|---|---|---|---|
| ||||
import React from "react";
import { DependencyContext } from "@fe-plugin/components/lib/context";
import { getComponentInfo } from "@fe-plugin/common/lib/component-info";
import { getElementByKey } from "@fe-plugin/common/lib/component-element";
import * as ELEMENT_KEY from "constants/element-keys";
//创建main组件
class Main extends React.Component {
// 获取上下文
static contextType = DependencyContext;
// 处理逻辑
hanldeClick() {
console.log("点击了按钮");
}
render() {
// 从上上下文获取 配置
const { config } = this.context;
// 获取信息,并创建获取element的方法
const componentInfo = getComponentInfo(config);
const getElement = (type) => getElementByKey(componentInfo.elements, type);
return (
<div>
<Button
data={getElement(ELEMENT_KEY.BTN_A)}
onClick={() => hanldeClickAnswerButton()}
/>
</div>
);
}
}
export default Main; |
...
引入template模块上下文(点击查看template模块的创建 )
创建可编辑组件(点击查看编辑型组件创建)
内置页的引用(点击查看template模块下内置页创建)
示例:创建一个template组件
代码块 | ||||
---|---|---|---|---|
| ||||
import React from "react";
import { 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-keys";
// 创建一个可编辑组件
const EditableComponent = withEditableComponent();
// 编辑器舞台编辑组件
class Template extends React.Component {
//获取上下文
static contextType = DependencyContext;
// 渲染组件
renderCmp() {
// 根据元素配置的key值创建一个可编辑元素
const EditableButton = withEditableButton(ELEMENT_KEY.Button)((element) => {
return <BaseButton data={element} style={element.style} />;
});
return (
<EditableComponent>
<div>
<EditableButton />
</div>
</EditableComponent>
);
}
}
export default Template; |
...
渲染setting模块需要以下步骤:
1、在default-setting中将 hasComponentSetting 设置为 true
2、在模块入口传入onChange、initValue参数,提供数据初始化,数据更改等功能(点击查看模块入口)
示例:创建一个setting组件
代码块 | ||||
---|---|---|---|---|
| ||||
import React from "react";
import { 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-keys";
// 创建一个可编辑组件
const EditableComponent = withEditableComponent();
// 编辑器舞台编辑组件
class Template extends React.Component {
//获取上下文
static contextType = DependencyContext;
// 渲染组件
renderCmp() {
// 根据元素配置的key值创建一个可编辑元素
const EditableButton = withEditableButton(ELEMENT_KEY.Button)((element) => {
return <BaseButton data={element} style={element.style} />;
});
return (
<EditableComponent>
<div>
<EditableButton />
</div>
</EditableComponent>
);
}
}
export default Template; |
...
template、main模块中存在的弹出层模块,称之为内置页,可做组件的弹出层逻辑渲染。
...
1、template组件中的内置页
内置页在template模块中创建使用可编辑型组件创建。
示例:termplate模块中内置页的创建
代码块 | ||||
---|---|---|---|---|
| ||||
import React from "react";
import {
withEditableButton,
withEditableDialog,
} from "@fe-plugin/components/lib/templates/editable-element";
import { getComponentInfo } from "@fe-plugin/common/lib/component-info";
import { getElementByKey } from "@fe-plugin/common/lib/component-element";
import BaseDialog from "@fe-plugin/components/lib/templates/cmps/dialog";
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);
// 根据元素配置的key值创建一个可编辑元素
const EditableButton = withEditableDialog(ELEMENT_KEY.Button)((element) => {
return <BaseButton data={element} style={element.style} />;
});
const EditableDialog = withEditableButton(ELEMENT_KEY.Dialog)((element) => {
return (
<BaseDialog data={element}>
<EditableButton />
</BaseDialog>
);
});
return (
<Dialog name={ELEMENT_KEY.POPUP_DIALOG}>
<EditableDialog />
</Dialog>
);
}
}
export default InlinePage; |
...
2、main组件中的内置页
内置页在main模块中的创建使用渲染型组件创建。
示例:main模块中内置页的创建
代码块 | ||||
---|---|---|---|---|
| ||||
import React from "react";
import Dialog from "@fe-plugin/components/lib/h5/confirm-dialog";
import withPopup from "@fe-plugin/components/lib/h5/with-popup";
import { getElementByKey } from "@fe-plugin/common/lib/component-element";
import * as ELEMENT_KEY from "constants/element-keys";
// 可弹出内置页渲染
function InlineRender(props) {
// 获取main组件传入的参数
const { componentInfo, onClose, getElement } = props;
const getElement = (type) => getElementByKey(componentInfo, type);
return (
<Dialog
dialog={getElement(ELEMENT_KEY.POPUP_DIALOG)}
image={getElement(ELEMENT_KEY.IMAGE_B)}
button={getElement(ELEMENT_KEY.BTN_B)}
onClick={onClose}
onClose={onClose}
/>
);
}
export default withPopup(InlineRender); |