1.0.6 • Published 3 years ago

form-taro3-react v1.0.6

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

Taro 3.x 表单组件 - React & Typescript

基于 Taro 3.x 封装的基础表单组件,目前仅实现 React 版本,支持 async-validator 规则


特性

  • 支持 Taro 3.x React
  • 表单控件支持传入 async-validator 校验规则
  • 支持表单联动

安装

npm install form-taro3-react

可用组件


如何使用

引入表单样式

/** src/app.scss */

// 完整引入
@import '~form-taro3-react/dist/styles/index';

// 按需引入
@import '~form-taro3-react/dist/styles/input';

CustomizeForm

表单组件

CustomizeForm 的方法需要通过 Ref 调用,所以请在当前组件中创建 Ref 对象,具体参考下方示例代码

import React, {Component, createRef} from 'react';
import { CustomizeFormExpose } from 'form-taro3-react';

export default class Index extends Component {
  // 表单 Ref
  formRef = createRef<CustomizeFormExpose>();
  
  render() {
  ...  
}

通用参数

参数类型必填说明
refReact.RefObject<CustomizeFormExpose>表单对象,用于获取表单对象并控制表单
defaultValueRecord<string, any>默认值
labelStyleCSSProperties表单项标签样式
onValueChange(diff:any) => void表单值变更事件
childrenReactNode[] ReactNode表单内容元素

可用方法

方法类型说明
validate() => Promise<void>校验整个表单,根据设置的 async-validator rules
validateField(name: string) => Promise<void>校验单个表单项,根据表单项设置的 async-validator rules
reset(form?:Record<string, any>) => void重置整个表单,可传入参数值重置
setFieldsValue(value: Record<string, any>) => void设置整个表单的值
getFieldValue(name: string) => any获取单个表单项的值
getFieldsValue() => Record<string, any>获取整个表单的值

表单项通用参数

参数类型必填说明
labelstring表单左侧/顶部标签
rulesRuleItem RuleItem[]传入 async-validator 校验规则,在触发 validate()validateField() 时校验
hideRequiredMarkboolean隐藏*必填标识,默认会判断 rules 中的 required 生成
labelStyleCSSProperties当前表单项的标签样式,优先级最大

FormTextInput

单行文本

通用参数

参数类型必填说明
fieldPropsInputPropsTaro Input 的通用参数,其中必须声明表单项的 name,否则无法获取到表单值
prefixReactNode前缀
suffixReactNode后缀
align'left' 'right'文本框内容对齐方式:'left'-左对齐、'right'-右对齐,默认值:'left'
hideClearboolean是否隐藏清空按钮

FormTextArea

多行文本框

通用参数

参数类型必填说明
fieldPropsTextareaPropsTaro Textarea 的通用参数,其中必须声明表单项的 name,否则无法获取到表单值

FormRadioGroup

单选框

通用参数

参数类型必填说明
fieldPropsFormRadioGroupPropsTaro RadioGroup 的通用参数,其中必须声明表单项的 name,否则无法获取到表单值
layout'vertical' 'horizontal'排列方式,'vertical'-垂直排列、'horizontal'-水平排列(默认)

FormCheckboxGroup

多选框

通用参数

参数类型必填说明
fieldPropsFormCheckboxGroupPropsTaro CheckboxGroup 的通用参数,其中必须声明表单项的 name,否则无法获取到表单值
layout'vertical' 'horizontal'排列方式,'vertical'-垂直排列、'horizontal'-水平排列(默认)

FormSwitch

开关

通用参数

参数类型必填说明
fieldPropsFormSwitchPropsTaro Switch 的通用参数,其中必须声明表单项的 name,否则无法获取到表单值

FormPicker

滚动选择器

通用参数

参数类型必填说明
fieldPropsFormPickerPropsTaro FormPickerProps 的通用参数,其中必须声明表单项的 name,否则无法获取到表单值
placeholderstring占位符,未选中任何选项时的显示,与 fieldProps 同级
separatorstring分隔符,在多列选择时使用,与 fieldProps 同级
onPickerChange(e: any) => void选择变更事件

FormDependency

联动控件

此组件主要参考了 ProFormComponent 的 ProFormDependency ,但当前实现的版本仅支持返回整个 form 的值

通用参数

参数类通用参型必填说明
renderer(form: any) => ReactElement该方法会返回当前 form 表单的值,可以用该值来做表单变化等逻辑

示例代码

import React, {Component, createRef} from 'react';
import {View, Text, Button} from '@tarojs/components';
import {
  CustomizeForm,
  CustomizeFormExpose, FormDependency,
  FormPicker,
  FormRadioGroup,
  FormTextArea,
  FormTextInput
} from 'form-taro3-react';

export default class Index extends Component {
  // 表单 Ref
  formRef = createRef<CustomizeFormExpose>();

  /**
   * 表单校验
   */
  validate() {
    this.formRef.current?.validate().then(() => {
      // 校验通过
      // 获取表单值
      console.log(this.formRef.current?.getFieldsValue());
    }).catch((error)=>{
      // 校验不通过
    });
  }
  
  /**
   * 校验单个表单
   */
  validate() {
    this.formRef.current?.validateField('title').then(() => {
      // 校验通过
      // 获取表单值
      console.log(this.formRef.current?.getFieldValue('title'));
    }).catch((error)=>{
      // 校验不通过
    });
  }

  render() {
    return (
      <View className='index'>
        <CustomizeForm
          ref={this.formRef}
          defaultValue={{content: 'Taro 3.x React 表单组件封装'}}
          onValueChange={(diff) => {
            console.log(diff);
          }}
        >
          <FormTextInput
            label='标题'
            fieldProps={{
              name: 'title',
              placeholder: '请输入标题'
            }}
            rules={{required: true, message: '标题不能为空'}}
          />
          <FormPicker
            label='选择语言'
            fieldProps={{
              name: 'picker',
              mode: 'selector',
              range: ['Vue', 'React', 'Angular']
            }}
            rules={{required: true, message: '请选择语言'}}
          />
          <FormRadioGroup
            label='性别'
            fieldProps={{
              name: 'selector',
            }}
            options={[
              {label: '男', option: {value: '1'}},
              {label: '女', option: {value: '2'}}
            ]}
            rules={{required: true, message: '请选择'}}
          />
          <FormTextArea
            label='内容'
            fieldProps={{name: 'content'}}
            rules={{required: true, message: '内容不能为空'}}
          />
          <FormDependency
            renderer={(form) => {
              return form?.selector === '1' ? <Text>你选择了:男</Text> : <Text>你选择了:女</Text>;
            }}
          />
          <FormSwitch
            label='开关'
            fieldProps={{name: 'switch'}}
            rules={{required: true, message: '请选择开关'}}
          />
          <FormCheckboxGroup
            label='多选框'
            fieldProps={{
              name: 'checkbox'
            }}
            options={[
              {label: 'Apex', value: '1'},
              {label: 'PUBG', value: '2'},
              {label: 'CSOL', value: '3'},
            ]}
          />
          <Button onClick={this.validate.bind(this)}>提交</Button>
        </CustomizeForm>
      </View>
    );
  }
}

问题与反馈

如果有问题烦请反馈及PR,thx

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago