日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

阿里低代碼框架lowcode-engine自定義設置器詳解_React

作者:杰出D ? 更新時間: 2023-04-27 編程語言

前言

之前介紹了lowcode-engine引擎的自定義物料。在具體實際開發過程中,雖然官方提供了許多設置器,但可能滿足不了我們的需要,需要我們自定義設置器。

官方腳手架設置器開發

設置器主要用于低代碼組件屬性值的設置,顧名思義叫"設置器",又稱為 Setter。由于組件的屬性有各種類型,需要有與之對應的設置器支持,每一個設置器對應一個值的類型。

項目初始化

  • lowcode官方給我們提供了腳手架,我們通過腳手架可以快速創建
npm init @alilc/element lowcode-app-material  // lowcode-app-material項目名稱
  • 我們選擇物料【組件設置器(setter)】類型。確認

  • 安裝依賴,啟動調試環境
npm & yarn install

安裝好依賴之后,就可以啟動開發環境

yarn dev

開發自己的設置器

import * as React from "react";
import { Input } from "@alifd/next";
import "./index.scss";
interface AltStringSetterProps {
  // 當前值
  value: string;
  // 默認值
  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>
    );
  }
}

使用設置器

開發完畢之后,需發包或者通過link的方式使用AltStringSetter 到設計器中:

import AltStringSetter from 'AltStringSetter';
import { setters } from '@alilc/lowcode-engine';
const { registerSetter } = registerSetter;
registerSetter('AltStringSetter', AltStringSetter);

在物料庫內設置器開發

上面我們介紹了單獨去開發設置器,需發包后注冊到引擎中使用。還有一種情況一些設置器是跟隨組件,為組件使用,不需要共享,我們可以直接可以在物料庫中開發設置器。

設置器開發

之前我們介紹過通過官方物料庫腳手架去開發組件。組件在編譯完成之后會在根目錄生成lowcode文件夾,里面的內容為組件的meta信息。

我們可以在當前目錄創建_setter文件夾,來開發我們的setter,setter開發方式按官方文檔去開發。在這里,我們開發了一個DefaultValueSetter(默認值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>)
  }
}

使用設置器

設置器開發完成后,我們可以在組件的meta.ts中使用剛剛開發的設置器。

  {
        "title": {
          "label": {
            "type": "i18n",
            "en-US": "format",
            "zh-CN": "默認值"
          }
        },
        "name": "defaultValue",
        "setter": {
          "componentName": DefaultValueSetter, //默認值設置器
          "props": {
            "fieldType": 'input'
          },
          "isRequired": false,
          "initialValue": {
            valueType: '1',
            value: "",
          }
        }
      },

工程目錄結構為

結束語

原文鏈接:https://juejin.cn/post/7198803639992352825

欄目分類
最近更新