阿里低代碼框架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-06React Native中WebView與html雙向通信遇到的坑
這篇文章主要介紹了React Native中WebView與html雙向通信的一些問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01React中完整實例講解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