阿里低代码框架lowcode-engine设置默认容器详解

 更新时间:2023年02月27日 09:22:57   作者:杰出D  
这篇文章主要为大家介绍了阿里低代码框架lowcode-engine设置默认容器详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

之前我们介绍了lowcode-engine一些基础相关内容,接下来我们通过引擎实战一些内容,在一些场景当中,我们的默认容器不是页面,而是需要自定义容器。例如,在常见的低代码平台中默认容器是表单容器,通过表单容器类提供布局能力。接下来我们就去实现这个功能。

物料【FormContainer】开发

该物料组件主要是用来存放所有FormItem,可以设置列数。

物料组件

接下来我们看代码内容

export interface IFormContainerProps {
  // 列数
  cols: number;
}
/**
 * Form容器包装器。lowcode-engine不支持直接使用hooks组件,需要包裹一层,要不内容元素没办法直接嵌入
 */
export const FormContainerWrapper = forwardRef<IFormRef | undefined, IFormContainerProps>(function FormContainer({
  cols,
  children
}, ref) {
  const [form] = Form.useForm();
  React.useImperativeHandle(ref, () => {
    return {
      formRef: form
    }
  }, [])
  const getChildren = () => {
    if (React.Children.count(children) <= 1) {
      return children;
    }
    const newArray = groupArray(React.Children.toArray(children), cols);
    return newArray.map(childs => {
      return <Row key={childs?.[0]?.key} gutter={[16, 24]} className={generatorClass('form-container-row')}>
        {
          childs.map(child => {
            const { props } = child;
            const name = props.componentId || props.__id;
            return <Col key={name} span={24 / cols}>
              <Form.Item
                label=""
                name={name}
                rules={[{ required: props.isRequired, message: `${props.title}不能为空!` }]}
              >
                {child}
              </Form.Item>
            </Col>;
          })
        }
      </Row>
    })
  }
  const rootClassNames = classNames(generatorClass('form-container'));
  return (
    <Form form={form} className={rootClassNames}>
      {getChildren()}
    </Form>
  )
});
/**
 * 容器组件
 */
export class FormContainer extends React.Component<IFormContainerProps, any> {
  render() {
    return (
      <FormContainerWrapper {...this.props} />
    )
  }
}

在实现的过程中开始使用的hooks组件,发现会有问题,我们用class组件包装了下,就没什么问题了。后续迁去看看源码引擎是怎么加载物料的,再来回答这个问题。

物料Meta信息

上面的物料组件就有一个cols需要配置,对用的setter我们可以使用官方提供的RadioGroupSetter. 由于整个配置模版内容比较多,我只把关键点configure配置内容说下。

 "configure": {
    "props": [
      {
        "title": {
          "label": {
            "type": "i18n",
            "en-US": "cols",
            "zh-CN": "列数"
          }
        },
        "name": "cols",
        "setter": {
          "title": "列数",
          "componentName": "RadioGroupSetter",
          "isRequired": true,
          "props": {
            "options": [{
              "label": "1列",
              "value": 1,
            }, {
              "label": "2列",
              "value": 2,
            }, {
              "label": "3列",
              "value": 3,
            }, {
              "label": "4列",
              "value": 4
            }]
          },
          "initialValue": 1
        }
      }
    ],
    "supports": {
    },
    "component": {
      // 是否是容器组件,如果是容器组件,别的组件可以放置内容
      isContainer: true
    },
  }

我们看配置内容,一个是设置setter, 还有比较重要的一点就是在component下需要配置isContainer。如果为true,表示内容其它组件可以拖到该容器内。

模版内容修改

通过研究lowcode-engine,我们可以知道内容的渲染是通过schema.json来渲染内容。我们只需修改下初始的 schema.json。加上容器组件,模版内容为

 "componentName": "Page",
  "id": "node_dockcviv8fo1",
  ...
  "title": "页面",
  "isLocked": false,
  "condition": true,
  "conditionGroup": "",
  "children": [
    {
      // 容器组件
      "componentName": "FormContainer",
      "id": "node_oclcdgs7nr1",
      "props": {
        "cols": 2
      },
      "hidden": false,
      "title": "",
      "isLocked": false,
      "condition": true,
      "conditionGroup": ""
    }
  ]

我们看引擎的大纲内容,默认就有表单组件了。

这里有一点需要注意,有些场景,我们需要把容器组件toolbar上的操作给禁用掉,这块比较简单,可以看下官网怎么设置。

案例展示

我们看一个完整的例子。

结束语

以上就是lowcode-engine设置默认容器。后续我们会接着把案例完善起来。能做到创建表单,表单预览,数据的提交等功能。

更多关于lowcode engine设置默认容器的资料请关注脚本之家其它相关文章!

相关文章

  • React关于antd table中select的设值更新问题

    React关于antd table中select的设值更新问题

    这篇文章主要介绍了React关于antd table中select的设值更新问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • create-react-app构建项目慢的解决方法

    create-react-app构建项目慢的解决方法

    这篇文章主要介绍了create-react-app构建项目慢的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • React手写签名组件react-signature实现签字demo

    React手写签名组件react-signature实现签字demo

    这篇文章主要为大家介绍了React手写签名组件react-signature实现签字demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • useReducer使用详解及其应用场景

    useReducer使用详解及其应用场景

    这篇文章主要介绍了useReducer使用详解及其应用场景,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 浅谈使用React.setState需要注意的三点

    浅谈使用React.setState需要注意的三点

    本篇文章主要介绍了浅谈使用React.setState需要注意的三点,提出了三点对 React 新手来说是很容易忽略的地方,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • React Native 环境搭建的教程

    React Native 环境搭建的教程

    本篇文章主要介绍了React Native 环境搭建的教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • react antd实现动态增减表单

    react antd实现动态增减表单

    antd是react流行的ui框架库,本文主要介绍了react antd实现动态增减表单,分享给大家,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • create-react-app修改为多页面支持的方法

    create-react-app修改为多页面支持的方法

    本篇文章主要介绍了create-react-app修改为多页面支持的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 2023年最新react面试题总结大全(附详细答案)

    2023年最新react面试题总结大全(附详细答案)

    React是一种广泛使用的JavaScript库,为构建用户界面提供了强大的工具和技术,这篇文章主要给大家介绍了关于2023年最新react面试题的相关资料,文中还附有详细答案,需要的朋友可以参考下
    2023-10-10
  • 教你快速搭建 React Native 开发环境

    教你快速搭建 React Native 开发环境

    这篇文章主要介绍了搭建 React Native 开发环境的详细过程,本文通过图文指令给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08

最新评论