sula入门教程

简介: 本文适合有react、antd基础的小伙伴阅读

一、what sula?


sula 是在蚂蚁金服多个生产项目沉淀出来的一套「产品级」配置框架,通过插件化的方式实现了配置的高扩展性与高灵活性,并且 sula 通过行为插件的引入,建立了渲染插件与用户行为的连接,实现了场景式的语义化配置。

在github的sula项目中package.json可以看到如下:

"antd": "4.3.4"

可以看出sula是基于antd 的,因此熟悉antd的小伙伴上手是很快的。


二、why sula?


1、sula 通过 ctx 实现了插件与核心组件的通信,配置规则灵活且易于扩展

2、 自动 loading,sula 不侵入式帮助用户完成按钮、超链接、图标点击过程的 loading 管理。


sula有5个模板、3种组件

5个模板:

1、创建表单CreateForm 2、查询表格QueryTable 3、分步表单(比较少用到)4、分步表格(比较少用到)5、查询表单QueryForm


3种组件

1、Form2、Table3、ModalForm(弹框、抽屉


Tips:mode有三种模式

'create'、'edit'、'view' (默认 edit);


create 模式

image.png

edit 模式

image.png

view 模式

image.png


三、简单的Demo


import React from 'react';
import { Form } from 'sula';
export default () => {
  const fields = [
    {
      name: 'name',
      label: '前端早茶',
      field: {
        type: 'input',
        props: {
          placeholder: '请输入',
        },
      },
    }    
  ];
  return (
    <>
      <Form ref={formRef} fields={fields} />
    </>
  );
};


效果如下:

image.png

Tips:

没接触过sula的小伙伴会说,这么简单的功能,还要这么多代码吖。

其实这些代码都是cv的。sula提供了一个在线配置的开源项目,我们可以在上面配好页面,然后把配置的代码拷贝到自己的项目里面,很方便。


在线配置好我们需要的组件,效果如下:

image.png


然后查看配置的代码,效果如下:

image.png


sula 的在线配置化工具 https://cook-sula.vercel.app/#/

四、如何使用sula

这里我们使用umi作为例子

Step 1:  创建umi项目

mkdir sula-use && cd sula-use
yarn create @umijs/umi-app && npm i && npm start

浏览器打开http://localhost:8000/,就可以看到欢迎页面。


Step 2:  安装 sula 和 umi-plugin-sula

npm i sula umi-plugin-sula --save


Step 3:  在 .umirc.js 中启用 umi-plugin-sula 插件

export default defineConfig({
  sula: {
      locale: {
          default: 'zh-CN'      
      }  
  },
})


Step 4:  在 src 目录下新建 global.js 并导入 antd 主题并注册项目中所需要 icon

// global.js
import { Icon } from 'sula';
import { DeleteOutlined } from '@ant-design/icons';
import 'antd/dist/antd.less';
// 注册所需的icon
Icon.iconRegister({
  delete: DeleteOutlined,
});

Tips: 其实我们也可以把sula项目引入到自己项目,不当成插件引入


到这里就可以开始使用sula了。


五、国际化与多语言


// 默认中文展示
export default {
  sula: {},
  locale: {
    default: 'zh-CN',
    antd: true,
    baseNavigator: false,
  },
};


六、图表


之前sula使用的是@sula/charts,现在官方不推荐继续使用,后续会使用G2。

image.png


七、ctx与表单依赖


ctx是什么?

sula 内所有配置属性,均支持配置方法,ctx 为该方法的第一个参数,配置给不同属性时,ctx 内容会有差异

Tips:  Form\Table对应的ctx也是有所区别的简单的demo

const fields = [
  {
    name: 'name',
    label: '姓名',
    field: (ctx) => {
      return <Input disabled={ctx.mode === 'view'} />;
    },
  },
];

平时我们在使用sula的时候,如上面的ctx来编写。


Form

  • form 实例
  • history
  • mode: 表单模式, 支持 'create' | 'view' | 'edit'
  • disabled: 是否可点击
  • source:表单项数据源 (select、checkboxgroup等支持source)
  • results、 result:链式操作的上一个行为 promise 返回的结果


Table

  • table 实例
  • dataSource: table 数据源
  • history
  • index: 索引
  • record: 当前行数据
  • text: 当前行的值
  • params: 请求参数
  • data: 接口返回数据
  • result、results: 链式操作的上一个行为 promise 返回的结果


模板字符串

  • sula 定义的模版字符串 '#{}' 用于对 ctx 的解析

表单依赖

有些时候,有些业务需求需要字段之间是有所关联与依赖的。这个时候就需要我们使用到dependency。

import React from 'react';
import { Form } from 'sula';
export default () => {
  const config = {
    fields: [
      {
        name: 'weixin',
        label: '微信号',
        field: {
          type: 'input',
          props: {
            placeholder: '请输入',
          },
        },
        dependency: {
          disabled: {
            relates: ['name'],
            inputs: [['feng']],
            output: true,
            defaultOutput: false,
          },
        },
      }
    ],
  };
  return <Form {...config} />;
};

效果如下:

image.png


八、最后


sula有它的优势,也有它的不足,广东靓仔列举了几点不足:

1、社区不活跃

2、新手遇到问题比较难找到解决方案

3、样式比较固定灵活度有所欠缺

4、一些依赖性比较强的复杂交互比较难实现


因此项目中使用sula与否,要按实际情况取舍。

相关文章
|
前端开发 安全 JavaScript
为你的React项目接入高德地图
为你的React项目接入高德地图
1219 0
|
Windows
gitlab 账号注册及修改资料
填写注册信息 点击注册链接奇迹 GitLab后,可以看到以下界面,输入用户名、邮箱等信息,点击 SIGN UP 进行注册: 确认邮件 注册后邮箱会收到一封确认邮件,如果没有收到邮件,可能是被误判为垃圾邮件,请进入邮箱的垃圾箱进行查找。
11636 0
|
JSON 前端开发 JavaScript
开源表单方案 Formily 的核心设计思路
Formily 是一个数据+协议驱动的表单解决方案,它站在Reactive响应式编程巨人的肩膀上,构建出了从基础表单到低代码领域的高性能通用基础能力,同时其配套的跨框架+跨终端组件生态体系,也能让用户更高效的开发日常业务表单,尽可能的减少了重复冗余的逻辑实现。本篇内容来自白玄在第十六届D2前端技术论坛的分享,将为你介绍如何在高复杂业务场景下提高我们的表单性能与表单开发效率。
5517 1
开源表单方案 Formily 的核心设计思路
|
存储 JSON 运维
直击痛点,详解 K8s 日志采集最佳实践
在 Kubernetes 中,日志采集和普通虚拟机的方式有很大不同,相对实现难度和部署代价也略大,但若使用恰当则比传统方式自动化程度更高、运维代价更低。
直击痛点,详解 K8s 日志采集最佳实践
Mac卸载 Node npm,升级 Node
Mac卸载 Node npm,升级 Node
221 0
|
API Android开发 Kotlin
Android实战经验分享之如何获取状态栏和导航栏的高度
在Android开发中,掌握状态栏和导航栏的高度对于优化UI布局至关重要。本文介绍两种主要方法:一是通过资源名称获取,简单且兼容性好;二是利用WindowInsets,适用于新版Android,准确性高。文中提供了Kotlin代码示例,并对比了两者的优缺点及适用场景。
1149 1
|
存储 NoSQL 关系型数据库
MongoDB非关系型数据库实战
【5月更文挑战第6天】MongoDB,流行的NoSQL数据库,以其灵活的数据模型和高性能备受青睐。本文介绍了MongoDB的基础,包括文档型数据库特性、安装配置、数据操作。通过电商订单管理的实战案例,展示了MongoDB在处理复杂数据结构和大规模数据时的优势,适用于电商、游戏、视频直播等场景。MongoDB的索引、全文搜索和地理空间功能进一步增强了其实用性。注意性能优化和扩展性以确保系统稳定性和可靠性。
|
JavaScript 前端开发 API
【入门】你连Babel都不会配?那插件不成乱装了
大家好,我是小鑫同学。一位从事过Android开发、混合开发,现在长期从事前端开发的编程爱好者,我觉得在编程之路上最重要的是知识的分享,所谓三人行必有我师。所以我开始在社区持续输出我所了解到、学习到、工作中遇到的各种编程知识,欢迎有想法、有同感的伙伴加我fe-xiaoxin微信交流~
506 0
|
安全 数据库
入侵检测系统
入侵检测系统
380 0
石英晶体振荡器【Multisim】【高频电子线路】
石英晶体振荡器【Multisim】【高频电子线路】
959 0