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

- 安裝依賴,啟動(dòng)調(diào)試環(huán)境
npm & yarn install
安裝好依賴之后,就可以啟動(dòng)開(kāi)發(fā)環(huán)境
yarn dev
開(kāi)發(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è)置器
開(kāi)發(fā)完畢之后,需發(fā)包或者通過(guò)link的方式使用AltStringSetter 到設(shè)計(jì)器中:
import AltStringSetter from 'AltStringSetter';
import { setters } from '@alilc/lowcode-engine';
const { registerSetter } = registerSetter;
registerSetter('AltStringSetter', AltStringSetter);
在物料庫(kù)內(nèi)設(shè)置器開(kāi)發(fā)
上面我們介紹了單獨(dú)去開(kāi)發(fā)設(shè)置器,需發(fā)包后注冊(cè)到引擎中使用。還有一種情況一些設(shè)置器是跟隨組件,為組件使用,不需要共享,我們可以直接可以在物料庫(kù)中開(kāi)發(fā)設(shè)置器。
設(shè)置器開(kāi)發(fā)
之前我們介紹過(guò)通過(guò)官方物料庫(kù)腳手架去開(kāi)發(fā)組件。組件在編譯完成之后會(huì)在根目錄生成lowcode文件夾,里面的內(nèi)容為組件的meta信息。

我們可以在當(dāng)前目錄創(chuàng)建_setter文件夾,來(lái)開(kāi)發(fā)我們的setter,setter開(kāi)發(fā)方式按官方文檔去開(kāi)發(fā)。在這里,我們開(kāi)發(fā)了一個(gè)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è)置器開(kāi)發(fā)完成后,我們可以在組件的meta.ts中使用剛剛開(kāi)發(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é)束語(yǔ)
以上就是設(shè)置器的開(kāi)發(fā)和使用。后續(xù)我們介紹一下基于lowcode引擎做出的一個(gè)完整的案例,更多關(guān)于lowcode-engine自定義設(shè)置器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
React如何利用相對(duì)于根目錄進(jìn)行引用組件詳解
這篇文章主要給大家介紹了關(guān)于React如何使用相對(duì)于根目錄進(jìn)行引用組件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
react實(shí)現(xiàn)導(dǎo)航欄二級(jí)聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了react實(shí)現(xiàn)導(dǎo)航欄二級(jí)聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
深入了解響應(yīng)式React Native Echarts組件
近年來(lái),隨著移動(dòng)端對(duì)數(shù)據(jù)可視化的要求越來(lái)越高,通過(guò) WebView 在移動(dòng)端使用 Echarts 這樣功能強(qiáng)大的前端數(shù)據(jù)可視化庫(kù),是解決問(wèn)題的好辦法。下面就和小編來(lái)一起學(xué)習(xí)一下吧2019-05-05
插件化機(jī)制優(yōu)雅封裝你的hook請(qǐng)求使用方式
這篇文章主要為大家介紹了插件化機(jī)制優(yōu)雅封裝你的hook請(qǐng)求使用方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
react進(jìn)階教程之異常處理機(jī)制error?Boundaries
在react中一旦出錯(cuò),如果每個(gè)組件去處理出錯(cuò)情況則比較麻煩,下面這篇文章主要給大家介紹了關(guān)于react進(jìn)階教程之異常處理機(jī)制error?Boundaries的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
React進(jìn)階學(xué)習(xí)之組件的解耦之道
這篇文章主要給大家介紹了關(guān)于React進(jìn)階之組件的解耦之道,文中通過(guò)詳細(xì)的示例代碼給大家介紹了組件分割與解耦的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
React中setState/useState的使用方法詳細(xì)介紹
這篇文章主要介紹了React中setState/useState的使用方法,useState 和 setState 在React開(kāi)發(fā)過(guò)程中 使用很頻繁,但很多人都停留在簡(jiǎn)單的使用階段,并沒(méi)有正在了解它們的執(zhí)行機(jī)制2023-04-04
React?中的?JS?報(bào)錯(cuò)及容錯(cuò)方案
這篇文章主要為大家介紹了React?中的?JS?報(bào)錯(cuò)及容錯(cuò)方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08

