sula入門教程

一、what sula?
sula 是在螞蟻金服多個(gè)生產(chǎn)項(xiàng)目沉淀出來的一套「產(chǎn)品級(jí)」配置框架,通過插件化的方式實(shí)現(xiàn)了配置的高擴(kuò)展性與高靈活性,并且 sula 通過行為插件的引入,建立了渲染插件與用戶行為的連接,實(shí)現(xiàn)了場景式的語義化配置。

在github的sula項(xiàng)目中package.json可以看到如下:

"antd": "4.3.4"
可以看出sula是基于antd 的,因此熟悉antd的小伙伴上手是很快的。
二、why sula?
1、sula 通過 ctx 實(shí)現(xiàn)了插件與核心組件的通信,配置規(guī)則靈活且易于擴(kuò)展
2、 自動(dòng) loading,sula 不侵入式幫助用戶完成按鈕、超鏈接、圖標(biāo)點(diǎn)擊過程的 loading 管理。
sula有5個(gè)模板、3種組件
5個(gè)模板:

1、創(chuàng)建表單CreateForm
2、查詢表格QueryTable
3、分步表單(比較少用到)
4、分步表格(比較少用到)
5、查詢表單QueryForm


3種組件

1、Form
2、Table
3、ModalForm(彈框、抽屜)


Tips:mode有三種模式

'create'、'edit'、'view' (默認(rèn) edit);

create 模式



edit 模式



view 模式



三、簡單的Demo
import React from 'react';
import { Form } from 'sula';

export default () => {
  const fields = [
    {
      name: 'name',
      label: '前端早茶',
      field: {
        type: 'input',
        props: {
          placeholder: '請(qǐng)輸入',
        },
      },
    }    
  ];

  return (
    <>
      <Form ref={formRef} fields={fields} />
    </>
  );
};


效果如下:





Tips:

沒接觸過sula的小伙伴會(huì)說,這么簡單的功能,還要這么多代碼吖。

其實(shí)這些代碼都是cv的。sula提供了一個(gè)在線配置的開源項(xiàng)目,我們可以在上面配好頁面,然后把配置的代碼拷貝到自己的項(xiàng)目里面,很方便。


在線配置好我們需要的組件,效果如下:





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





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

四、如何使用sula
這里我們使用umi作為例子
Step 1:  創(chuàng)建umi項(xiàng)目

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 并導(dǎo)入 antd 主題并注冊(cè)項(xiàng)目中所需要 icon

// global.js
import { Icon } from 'sula';
import { DeleteOutlined } from '@ant-design/icons';
import 'antd/dist/antd.less';

// 注冊(cè)所需的icon
Icon.iconRegister({
  delete: DeleteOutlined,
});
Tips: 其實(shí)我們也可以把sula項(xiàng)目引入到自己項(xiàng)目,不當(dāng)成插件引入


到這里就可以開始使用sula了。

五、國際化與多語言
// 默認(rèn)中文展示
export default {
  sula: {},
  locale: {
    default: 'zh-CN',
    antd: true,
    baseNavigator: false,
  },
};
六、圖表
之前sula使用的是@sula/charts,現(xiàn)在官方不推薦繼續(xù)使用,后續(xù)會(huì)使用G2。


七、ctx與表單依賴
ctx是什么?
sula 內(nèi)所有配置屬性,均支持配置方法,ctx 為該方法的第一個(gè)參數(shù),配置給不同屬性時(shí),ctx 內(nèi)容會(huì)有差異

Tips:  Form\Table對(duì)應(yīng)的ctx也是有所區(qū)別的
簡單的demo
const fields = [
  {
    name: 'name',
    label: '姓名',
    field: (ctx) => {
      return <Input disabled={ctx.mode === 'view'} />;
    },
  },
];
平時(shí)我們?cè)谑褂胹ula的時(shí)候,如上面的ctx來編寫。


Form

form 實(shí)例

history

mode: 表單模式, 支持 'create' | 'view' | 'edit'

disabled: 是否可點(diǎn)擊

source:表單項(xiàng)數(shù)據(jù)源 (select、checkboxgroup等支持source)

results、 result:鏈?zhǔn)讲僮鞯纳弦粋€(gè)行為 promise 返回的結(jié)果


Table

table 實(shí)例

dataSource: table 數(shù)據(jù)源

history

index: 索引

record: 當(dāng)前行數(shù)據(jù)

text: 當(dāng)前行的值

params: 請(qǐng)求參數(shù)

data: 接口返回?cái)?shù)據(jù)

result、results: 鏈?zhǔn)讲僮鞯纳弦粋€(gè)行為 promise 返回的結(jié)果


模板字符串

sula 定義的模版字符串 '#{}' 用于對(duì) ctx 的解析

表單依賴
有些時(shí)候,有些業(yè)務(wù)需求需要字段之間是有所關(guān)聯(lián)與依賴的。這個(gè)時(shí)候就需要我們使用到dependency。

import React from 'react';
import { Form } from 'sula';

export default () => {
  const config = {
    fields: [
      {
        name: 'weixin',
        label: '微信號(hào)',
        field: {
          type: 'input',
          props: {
            placeholder: '請(qǐng)輸入',
          },
        },
        dependency: {
          disabled: {
            relates: ['name'],
            inputs: [['feng']],
            output: true,
            defaultOutput: false,
          },
        },
      }
    ],
  };
  return <Form {...config} />;
};
效果如下:



八、最后
sula有它的優(yōu)勢(shì),也有它的不足,廣東靚仔列舉了幾點(diǎn)不足:

1、社區(qū)不活躍
2、新手遇到問題比較難找到解決方案
3、樣式比較固定靈活度有所欠缺
4、一些依賴性比較強(qiáng)的復(fù)雜交互比較難實(shí)現(xiàn)
因此項(xiàng)目中使用sula與否,要按實(shí)際情況取舍。

作者:廣東靚仔


歡迎關(guān)注:前端早茶