阿里低代碼框架lowcode-engine自定義設(shè)置器詳解
前言
之前介紹了lowcode-engine引擎的自定義物料。在具體實際開發(fā)過程中,雖然官方提供了許多設(shè)置器,但可能滿足不了我們的需要,需要我們自定義設(shè)置器。
官方腳手架設(shè)置器開發(fā)
設(shè)置器主要用于低代碼組件屬性值的設(shè)置,顧名思義叫"設(shè)置器",又稱為 Setter。由于組件的屬性有各種類型,需要有與之對應(yīng)的設(shè)置器支持,每一個設(shè)置器對應(yīng)一個值的類型。
項目初始化
- lowcode官方給我們提供了腳手架,我們通過腳手架可以快速創(chuàng)建
npm init @alilc/element lowcode-app-material // lowcode-app-material項目名稱
- 我們選擇物料【組件設(shè)置器(setter)】類型。確認(rèn)

- 安裝依賴,啟動調(diào)試環(huán)境
npm & yarn install
安裝好依賴之后,就可以啟動開發(fā)環(huán)境
yarn dev
開發(fā)自己的設(shè)置器
import * as React from "react";
import { Input } from "@alifd/next";
import "./index.scss";
interface AltStringSetterProps {
// 當(dāng)前值
value: string;
// 默認(rèn)值
initialValue: string;
// setter 唯一輸出
onChange: (val: string) => void;
// AltStringSetter 特殊配置
placeholder: string;
}
export default class AltStringSetter extends React.PureComponent<AltStringSetterProps> {
componentDidMount() {
const { onChange, value, defaultValue } = this.props;
if (value == undefined && defaultValue) {
onChange(defaultValue);
}
}
// 聲明 Setter 的 title
static displayName = 'AltStringSetter';
render() {
const { onChange, value, placeholder } = this.props;
return (
<Input
value={value}
placeholder={placeholder || ""}
onChange={(val: any) => onChange(val)}
></Input>
);
}
}
使用設(shè)置器
開發(fā)完畢之后,需發(fā)包或者通過link的方式使用AltStringSetter 到設(shè)計器中:
import AltStringSetter from 'AltStringSetter';
import { setters } from '@alilc/lowcode-engine';
const { registerSetter } = registerSetter;
registerSetter('AltStringSetter', AltStringSetter);
在物料庫內(nèi)設(shè)置器開發(fā)
上面我們介紹了單獨去開發(fā)設(shè)置器,需發(fā)包后注冊到引擎中使用。還有一種情況一些設(shè)置器是跟隨組件,為組件使用,不需要共享,我們可以直接可以在物料庫中開發(fā)設(shè)置器。
設(shè)置器開發(fā)
之前我們介紹過通過官方物料庫腳手架去開發(fā)組件。組件在編譯完成之后會在根目錄生成lowcode文件夾,里面的內(nèi)容為組件的meta信息。

我們可以在當(dāng)前目錄創(chuàng)建_setter文件夾,來開發(fā)我們的setter,setter開發(fā)方式按官方文檔去開發(fā)。在這里,我們開發(fā)了一個DefaultValueSetter(默認(rèn)值setter)。
import React, { createElement } from 'react';
import { Switch, Select, Input, Button, } from '@alifd/next';
import { event } from '@alilc/lowcode-engine';
import './style.less';
const Option = Select.Option;
export interface DefaultValueSetterProps {
fieldType: 'input' | 'textarea' | 'number',
onChange: (value) => void;
value: IValue
}
export interface DefaultValueSetterState {}
export class DefaultValueSetter extends React.Component<DefaultValueSetterProps, DefaultValueSetterState> {
static displayName = 'DefaultValueSetter';
constructor(props) {
super(props);
this.state = {
};
}
componentDidMount(): void {
event.on(EDefaultValueSetterEventName.ValueChange, this.formulaValueChange)
}
// ...省略部分代碼
handleValueTypeChange = (valueType) => {
const { onChange, value } = this.props;
onChange({
...value,
valueType
});
}
handleValueChange = (currValue) => {
const { onChange, value } = this.props;
const newVale = {
...value,
value: currValue,
};
onChange(newVale);
}
render() {
const { fieldType, value } = this.props;
console.log('value, defaultValue', value, this.props)
return (<div className="lowcode-setter-ui-material-setter">
<Select style={{ width: '100%', marginBottom: 10 }} value={value?.valueType} onChange={this.handleValueTypeChange}>
<Option value='1'>自定義</Option>
<Option value='2'>公式編輯</Option>
</Select>
{this.getItem()}
</div>)
}
}
使用設(shè)置器
設(shè)置器開發(fā)完成后,我們可以在組件的meta.ts中使用剛剛開發(fā)的設(shè)置器。
{
"title": {
"label": {
"type": "i18n",
"en-US": "format",
"zh-CN": "默認(rèn)值"
}
},
"name": "defaultValue",
"setter": {
"componentName": DefaultValueSetter, //默認(rèn)值設(shè)置器
"props": {
"fieldType": 'input'
},
"isRequired": false,
"initialValue": {
valueType: '1',
value: "",
}
}
},
工程目錄結(jié)構(gòu)為

結(jié)束語
以上就是設(shè)置器的開發(fā)和使用。后續(xù)我們介紹一下基于lowcode引擎做出的一個完整的案例,更多關(guān)于lowcode-engine自定義設(shè)置器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
React實現(xiàn)動態(tài)調(diào)用的彈框組件
這篇文章主要為大家詳細(xì)介紹了React實現(xiàn)動態(tài)調(diào)用的彈框組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08
基于webpack開發(fā)react-cli的詳細(xì)步驟
這篇文章主要介紹了基于webpack開發(fā)react-cli的詳細(xì)步驟,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06
React Native中WebView與html雙向通信遇到的坑
這篇文章主要介紹了React Native中WebView與html雙向通信的一些問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
React中完整實例講解Recoil狀態(tài)管理庫的使用
這篇文章主要介紹了React中Recoil狀態(tài)管理庫的使用,Recoil的產(chǎn)生源于Facebook內(nèi)部一個可視化數(shù)據(jù)分析相關(guān)的應(yīng)用,在使用React的實現(xiàn)的過程中,因為現(xiàn)有狀態(tài)管理工具不能很好的滿足應(yīng)用的需求,因此催生出了Recoil,對Recoil感興趣可以參考下文2023-05-05

