环境准备
组件扩展涉及两个方面,一个是渲染组件,一个是在编辑器中配置组件,这两方面分别对应了以下两个工程: amis和amis-editor-demo,为了快速搭建环境,本次初探采用gitpod进行开发。
首先注册gitpod账号,然后打开amis,在github仓库地址前加入gitpod.io#,例如: ![在这里插入图片描述](https://img-blog.csdnimg.cn/190b8d23a57f460b8549d7a683048c90.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAbmluZ2RpMDkwNw==,size_20,color_FFFFFF,t_70,g_se,x_16) 然后就可以打开在线开发环境了,整个开发过程和在vscode中的操作一致 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5c619a5bafef41a3ad3af404998267c1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAbmluZ2RpMDkwNw==,size_20,color_FFFFFF,t_70,g_se,x_16) amis-editor-demo操作方式同上述过程一致,这样在5分钟以内我们就可以完成两个工程的开发环境搭建。
扩展组件渲染器开发
在src/renders下创建MyRenderer.tsx文件:
import {Renderer, RendererProps} from '../factory';
import React from 'react';
import {BaseSchema} from '../Schema';
export interface MyRendererProps extends RendererProps {
target?: string;
}
export interface MyRendererSchema extends BaseSchema {
type: 'my-renderer';
value?: string;
className?: string;
name?: string;
}
@Renderer({
test: /\bmy-renderer$/,
name: 'my-renderer'
})
export default class MyRenderer extends React.Component<MyRendererProps> {
static defaultProps = {
target: 'world'
}
render() {
const {
target
} = this.props;
return (
<p>Hello {target}!</p>
);
}
}
然后,在src/Schema.ts中添加: ![在这里插入图片描述](https://img-blog.csdnimg.cn/8a1b478855164d4695846796256473a2.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/192400857e354e5a878de2c1b96216ab.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/a6f04950651e4eb9be6f5abbfae14869.png) 最后,在src/index.tsx文件中引入该渲染器: ![在这里插入图片描述](https://img-blog.csdnimg.cn/74b97db2c37342e8b24763336f1083fa.png)
编辑器配置组件开发
amis-editor-demo工程已经存在这个组件的源码文件了(editor/MyRenderer.tsx),如下:
import React from 'react';
import {RendererEditor, BasicEditor} from 'amis-editor';
@RendererEditor('my-renderer', {
name: '自定义渲染器',
description: '这只是个示例',
type: 'my-renderer',
previewSchema: {
type: 'my-renderer',
target: 'demo'
},
scaffold: {
type: 'my-renderer',
target: '233'
}
})
export default class MyRendererEditor extends BasicEditor {
tipName = '自定义组件';
settingsSchema = {
title: '自定义组件配置',
controls: [
{
type: 'tabs',
tabsMode: 'line',
className: 'm-t-n-xs',
contentClassName: 'no-border p-l-none p-r-none',
tabs: [
{
title: '常规',
controls: [
{
name: 'target',
label: 'Target',
type: 'text'
}
]
},
{
title: '外观',
controls: []
}
]
}
]
};
}
文件打包使用
用使用最新开发的组件,需要对amis工程进行编译: ![在这里插入图片描述](https://img-blog.csdnimg.cn/67c3165134c240d5b8c6354b19d5221d.png) 编译完成后sdk下的sdk.js,就可以在其他工程中使用了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/4593f21c39bc4c47b82fbd64e01f6581.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAbmluZ2RpMDkwNw==,size_12,color_FFFFFF,t_70,g_se,x_16) 配置页面如图: ![在这里插入图片描述](https://img-blog.csdnimg.cn/66c51d713cc7485e81118e4b521e3b68.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAbmluZ2RpMDkwNw==,size_20,color_FFFFFF,t_70,g_se,x_16) 在引入sdk.js后预览页面也可以正常访问,否则会报错: ![在这里插入图片描述](https://img-blog.csdnimg.cn/99c48395e62d45faa9dcb3b2f88fa782.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAbmluZ2RpMDkwNw==,size_20,color_FFFFFF,t_70,g_se,x_16)
|