0.1.31 • Published 4 years ago

@sinoui/forms v0.1.31

Weekly downloads
-
License
MIT
Repository
-
Last release
4 years ago

@sinoui/forms

sinoui 表单

sinoui-form 使用formik管理表单状态,采用sinoui-components实现表单 UI。它能方便的在 React 项目中构建出表单。

Roadmap

表单项组件

  • TextInput
  • Select
  • Radio / RadioGroup
  • Checkbox / CheckboxGroup
  • FormText
  • DatePicker
  • TimePicker

基本用法

几个核心组件:

  • Form - 表单
  • FormItem - 表单项,负责渲染  表单标题、输入框、错误提示、帮助性提示等。
  • Label - 表单标题。
  • Field - 表单域。
  • TextInputRadioRadioGroup... - 输入框,具体的表单域。这些输入框自动与表单绑定。
import React from 'react';
import Form, {
  FormItem,
  Label,
  TextInput,
  FormState,
  RadioGroup,
  Radio,
} from 'sinoui-form';
import LoadingButton from 'sinoui-components/LoadingButton';

const Exmaple = () => (
  <Form
    onSubmit={(values, { setSubmitting }) => {
      callRemoteApi(values).then(
        () => setSubmitting(false),
        (error) => {
          setSubmitting(false);
          setErrors(transformMyApiErrors(errors));
        },
      );
    }}
  >
    <FormItem>
      <Label>姓名</Label>
      <TextInput name="userName" required maxLength={50} />
    </FormItem>
    <FormItem>
      <Label>性别</Label>
      <RadioGroup name="sex">
        <Radio>男</Radio>
        <Radio>女</Radio>
      </RadioGroup>
    </FormItem>
    <FormItem>
      <Label>年龄</Label>
      <TextInput type="number" name="age" />
    </FormItem>
    <FormState>
      {({ isSubmitting }) => (
        <LoadingButton raised color="primary" loading={isSubmitting}>
          提交
        </LoadingButton>
      )}
    </FormState>
  </Form>
);

在表单外提交

import { Form, FormItem, TextInput, FormState } from 'sinoui-form';

function submitForm(formik) {
  formik.setSubmitting(true);
  callRemoteApi(values).then(
    () => setSubmitting(false),
    error => {
      setSubmitting(false);
      setErrors(transformMyApiErrors(errors));
    },
  );
}

function FormExample() {
  return <div>
  <Form name="exampleForm">
    <FormItem>
      <Label>姓名</Label>
      <TextInput name="userName" required />
    </FormItem>
  </Form>
  <FormState formName="exampleForm">
    {formik => <LoadingButton
      color="primary"
      raised
      disabled={!formik.isValid}
      onClick={submitForm}
    >在表单外提交表单</LoadingButton>}
  </FormState>
}

表单域 <Field />

表单域<Field />会自动地将输入框与<Form />挂钩。它使用name属性来匹配表单状态。<Field />默认使用<input />元素渲染输入框。可以使用component或者render属性指定其他类型的输入框元素。

import React from 'react';
import Form, { Field } from 'sinoui-form';
import TextInput from 'sinoui-components/TextInput';

const Example = () => (
  <Form>
    <Field name="userName" />
    <Field name="firstName" component={TextInput} />
    <Field
      name="lastName"
      render={({ field /* _form */ }) => (
        <TextInput {...field} placeholder="lastName" />
      )}
    />
  </Form>
);

表单域验证

import React from 'react';
import Form, { Field } from 'sinoui-form';

const Example = () => (
  <Form>
    // 必填验证:
    <Field name="userName" required />
    // 最小值、最大值验证
    <Field name="age" min={10} max={30} />
    // 最大长度验证
    <Field name="userName" maxLength={10} />
    // 自定义表单域验证逻辑
    <Field
      name="userName"
      validate={(value) =>
        value &&
        !/^\d{11}$/.test(value) &&
        '请输入正确的手机号码,如13466666666'
      }
    />
  </Form>
);
0.1.31

4 years ago

0.2.22

4 years ago

0.2.22-alpha.0

4 years ago

0.2.21

4 years ago

0.2.20

4 years ago

0.2.19

4 years ago

0.2.18

4 years ago

0.2.17

4 years ago

0.2.16

4 years ago

0.2.15

4 years ago

0.2.14

4 years ago

0.2.13

4 years ago

0.2.12

4 years ago

0.2.11

4 years ago

0.2.10

4 years ago

0.2.9

4 years ago

0.2.8

4 years ago

0.2.7

4 years ago

0.2.6

4 years ago

0.2.6-alpha.1

5 years ago

0.2.6-alpha.0

5 years ago

0.2.5

5 years ago

0.2.4

5 years ago

0.2.3

5 years ago

0.2.2

5 years ago

0.2.1

5 years ago

0.2.0

5 years ago

0.2.0-alpha.6

5 years ago

0.2.0-alpha.5

5 years ago

0.2.0-alpha.4

5 years ago

0.2.0-alpha.3

5 years ago

0.2.0-alpha.2

5 years ago

0.2.0-alpha.1

5 years ago

0.1.30

5 years ago

0.1.29

5 years ago

0.1.28

5 years ago

0.1.27

5 years ago

0.1.25

5 years ago

0.1.24-alpha.1

5 years ago

0.1.22

5 years ago

0.1.20

5 years ago

0.1.19

5 years ago

0.1.18

5 years ago

0.1.17

5 years ago

0.1.17-alpha.2

5 years ago

0.1.17-alpha.1

5 years ago

0.1.17-alpha.0

5 years ago

0.1.16

5 years ago

0.1.15

5 years ago

0.1.14

5 years ago

0.1.13

5 years ago

0.1.13-alpha.0

5 years ago

0.1.12

5 years ago

0.1.12-alpha.5

5 years ago

0.1.12-alpha.4

5 years ago

0.1.12-alpha.2

5 years ago

0.1.12-alpha.1

5 years ago

0.1.12-alpha.0

5 years ago

0.1.11

5 years ago

0.1.10

5 years ago

0.1.9

5 years ago

0.1.5

5 years ago

0.1.4

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago