form表单通过checkbox_飞冰表单解决方案 - FormBinder

前言

中后台业务场景中,表单是一种很常见的与用户交互的方式,从业务角度看,表单主要是收集用户的信息,而从技术角度看,作为一个通用型的组件,它要解决的问题无非就是三个:

  • 把一个初始数据对象扔给它,它能够让 Form 内的交互型组件获取到数据并展示出来,同时这些组件上的数据也能反过来让 Form 组件获取到
  • 支持表单数据的各种规则校验,自定义提示信息的展示,自定义组件等
  • 怎么让写表单变得简单

功能

  • 类似双向数据绑定的数据管理
  • 数据进行校验
  • 自定义组件和布局

类似双向数据绑定的数据管理

FormBinder 的设计非常简单,将表单数据的管理和视图分离开来,表单的状态维护在组件内部,通过 values 初始化表单的数据,当表单域发生改变时会通过 onChange 动态更新 values,从而达到类似双向数据绑定的效果。也有点类似于最近的 react hooks,将 state 进行单独维护,实现 UI 和 Logic 的分离。

FormBinderWrapper 作为整个表单的容器,接收 value 和 onChange 等属性,其中 value 会作为整个表单数据的根节点,交由下层组件去获取、更新等操作:

import React, { Component } from 'react';
import { FormBinderWrapper, FormBinder } from '@icedesign/form-binder';
import { Input } from '@icedesign/base';class Login extends Component {//  设置表单初始数据state = {value: {username: '',password: '',checkbox: false}};// 表单的输入改变这里会动态响应formChange = value => {console.log(value);};render() {return (<FormBinderWrappervalue={this.state.value}   // 传递 valuesonChange={this.formChange} // 响应 onChange><FormBinder name="username" required message="请输入正确的名称" ><Input /> </FormBinder></FormBinderWrapper>);}
}

经过 FormBinderWrapper 包装的组件,数据传递和同步将被接管,这意味着:

  1. 你不需要使用表单元素的 onChange 来做同步,但还是可以继续监听 onChange 等事件。
  2. 你不需要使用表单元素的 value、 defaultValue 等属性来设置表单元素的值,只需通过初始的 value 进行设置。
  3. 你不需要通过 setState 来动态更新表单的值,因为表单默认支持双向数据通信,但可以通过 setFieldValue 和 getFieldValue 来设置或者更新表单域的值。

示例:

d27ceeeb629f846d6d07853da00ffa18.gif

数据进行校验

FormBinder 在数据校验上基于 async-validator 实现,提供了常见的校验规则,只需在相应的组件上添加校验规则即可,如果某些场景校验太复杂,也可以通过 validator 自定义校验规则实现。FormBinder 提供了 FormError 组件,可以根据需求自定义数据校验和表示提示信息展示。

import { FormBinderWrapper, FormBinder, FormError } from '@icedesign/form-binder';...<FormBinderWrappervalue={this.state.value}onChange={this.formChange}><FormBinder name="username" required message="请输入正确的名称" ><Input /> </FormBinder>// 自定义错误信息提示,FormBinder 和 FormError 需要保证 name <FormError  name="username" /></FormBinderWrapper>...

示例:

6d10195ec5adc05e9f70a5d68d930e61.gif

自定义组件和布局

FormBinder 核心是提供了数据的绑定(binding), 因此使用 FormBinder 你可以任意的选择组件库,也可以自定义组件 自由组合表单的布局,展示表单提示等,其核心是对表单数据的抽象。当表单数据没有通过校验或者需要分步骤提示等场景时,非常的方便。

c88dc003a796bbd5f2cfc8e860c37c18.gif

最后

FormBinder 的设计非常简单,解决的问题也非常简单,它只做了数据的双向状态管理收集和支持数据校验,这也是我们将它命名为 FormBinder 的原因。

详细文档请参考: FormBinder 组件

扩展信息

淘宝开发者平台​developer.taobao.com
  • 官方网站:飞冰-让前端开发简单而友好
  • 下载 Iceworks:https://alibaba.github.io/ice/iceworks
  • Github:http://github.com/alibaba/ice
  • 联系 & 招聘 ice-admin[at]alibaba-inc.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

@data 重写set方法_C#中的类、方法和属性

这节讲C#中的类&#xff0c;方法&#xff0c;属性。这是面向对象编程中&#xff0c;我们最直接打交道的三个结构。类&#xff1a;类(class)是面向对象中最基本的单元&#xff0c;它是一种抽象&#xff0c;对现实世界中事物的抽象&#xff0c;在C#中使用class关键字声明一个类&a…

Docker安装+镜像拉取+容器+创建镜像+push to docker hub

文章目录1. 安装2. 镜像操作3. 容器4. docker hub本文参考&#xff1a;https://zhuanlan.zhihu.com/p/23599229 1. 安装 参考 https://www.runoob.com/docker/ubuntu-docker-install.html curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun测试&#xff…

自然语言处理-LDA主题模型

LDA主题模型 哈尔滨工程大学-537 一、LDA主题模型简介 LDA(Latent Dirichlet Allocation)中文翻译为&#xff1a;潜在狄利克雷分布。LDA主题模型是一种文档生成模型&#xff0c;是一种非监督机器学习技术。它认为一篇文档是有多个主题的&#xff0c;而每个主题又对应着不同的词…

css 百分比 怎么固定正方形_你未必知道的49个CSS知识点

本文的每一条&#xff0c;都是我曾经发过的掘金沸点&#xff0c;其中有很多条超过了百赞(窃喜)。鉴于时不时有童鞋翻我以前的沸点&#xff0c;因此&#xff0c;本文收集了个人目前发过的所有CSS知识点动图&#xff0c;以便阅读。需要说明的是&#xff0c;顺序仍是按当时发布顺序…

CSS 实现加载动画之五-光盘旋转

今天做的这个动画叫光盘旋转&#xff0c;名字自己取的。动画的效果估计很多人都很熟悉&#xff0c;就是微信朋友圈里的加载动画。做过前面几个动画&#xff0c;发现其实都一个原理&#xff0c;就是如何将动画的元素如何分离出来。这个动画的实现也很简单&#xff0c;关键点在于…

css hover变成手_web前端入门到实战:彻底掌握css动画「transition」

马上就2020年了&#xff0c;不知道小伙伴们今年学习了css3动画了吗&#xff1f;说起来css动画是一个很尬的事&#xff0c;一方面因为公司用css动画比较少&#xff0c;另一方面大部分开发者习惯了用JavaScript来做动画&#xff0c;所以就导致了许多程序员比较排斥来学习css动画(…

用Docker部署TensorFlow Serving服务

文章目录1. 安装 Docker2. 使用 Docker 部署3. 请求服务3.1 手写数字例子3.2 猫狗分类例子参考&#xff1a; https://tf.wiki/zh_hans/deployment/serving.html# https://tensorflow.google.cn/tfx/serving/docker 1. 安装 Docker 以下均为 centos7 环境 参考文章&#xff1a…

K-Means算法和K-Means++算法的聚类

在构成圆形的30000个随机样本点上&#xff0c;设置7个簇&#xff0c;使用K-Means算法聚类 from math import pi, sin, cos from collections import namedtuple from random import random, choice from copy import copy import matplotlib.pyplot as plt import numpy as np…

convert.todatetime指定日期格式_MATLAB的时间与日期

7 日期和时间MATLAB在2014b版本中将日期和时间独立成了一个数据类型&#xff0c;新的版本中对于时间数据的处理功能更为强大。比如datetime和duration等函数&#xff0c;可以支持对时间的高效计算、对比、格式化显示。对这类数组的操作方法和对普通数组的操作是基本一致的。下…

dategurd oracle_Oracle 时间和日期处理

-- Oracle时间SELECT SYSDATE FROM dual; -- 系统时间SELECT SYSTIMESTAMP FROM dual; -- 当前系统时间戳SELECT CURRENT_TIMESTAMP FROM dual; -- 与时区设置有关&#xff0c;返回的秒是系统的&#xff0c;返回的日期和时间是根据时区转换过的SELECT current_date FROM dual; …

关于有多个Fragment中的textview跑马灯问题

问题描述一个activity里面有多个Fragment,1,2,3,4其中fragment1中有2个textview,在第一次启动fragment1的时候跑马灯能正常跑马; 当跳转到其他fragment后,再回到fragment1的时候,跑马灯已经不跑马了?关于这个是textview的焦点问题吗?求大神解答,,,求大神解决.... 解决方案1应…

跨设备链路聚合_路由与交换技术(华为设备)第五讲---链路聚合

前言&#xff1a;随着网络规模不断扩大&#xff0c;用户对骨干链路的带宽和可靠性提出了越来越高的要求。在传统技术中&#xff0c;常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽&#xff0c;但这种方案需要付出高额的费用&#xff0c;而且不够灵活。采…

电影评论分类:二分类问题

根据电影评论的 文字内容将其划分为正面或负面。 使用IMDB 数据集&#xff0c;它包含来自互联网电影数据库&#xff08;IMDB&#xff09;的50 000 条严重两极分 化的评论。数据集被分为用于训练的25 000 条评论与用于测试的25 000 条评论&#xff0c;训练集和测试 集都包含50%…

TensorFlow 2.0 - tf.distribute 分布式训练

文章目录1. 单机多卡 MirroredStrategy2. 多机训练 MultiWorkerMirroredStrategy3. TPU 张量处理单元学习于&#xff1a;简单粗暴 TensorFlow 2 1. 单机多卡 MirroredStrategy # 分布式训练 import tensorflow as tf import tensorflow_datasets as tfds# 1 单机多卡 Mirrore…

python抽象基类的作用_Python:多态、鸭子模型和抽象基类

1. 多态什么是多态-- 多态&#xff0c;指的是一种事务具有多种形态&#xff1b;-- python是一种动态语言&#xff0c;默认支持多态&#xff0c;同一个方法 调用 不同的类对象 &#xff0c;执行的 结果各不相同&#xff1b;多态实现-- 继承&#xff1a;不同子类 继承 同一父类&a…

非抢占式优先级调度算法_华为鸿蒙操作系统内核真面目之抢占式和非抢占式内核...

华为鸿蒙操作系统内核真面目之抢占式和非抢占式内核众所周知华为鸿蒙操作系统内核是Linux内核。而Linux内核即是抢占式内核也是非抢占式内核。设置软件优先级在优先级在0-99之间是抢占式优先级。设置优先级在100-139之间是非抢占式优先级。从华为官方发布的信息--优先级高的任务…

windows下python 使用CRF++ python接口的配置

1. 下载包含python接口的版本的CRF并安装&#xff0c;安装成功后查看python文件夹包含setup.py 文件&#xff0c;内容如下&#xff1a; #!/usr/bin/env python from distutils.core import setup,Extension,os import string setup(name "mecab-python", p…

TensorFlow 2.0 - Hub 模型复用

文章目录1. tfhub2. 例子&#xff1a;神经风格转换3. retrain 例子学习于&#xff1a;简单粗暴 TensorFlow 2 1. tfhub 网址&#xff1a; https://hub.tensorflow.google.cn/ https://tfhub.dev/ 可以搜索&#xff0c;下载模型 安装包 pip install tensorflow-hub import…

微服务 注册中心的作用_102,谈谈微服务注册中心zookeeperamp;Eureka

首先&#xff0c;大家要明确一点微服务注册中心是一个重要的组件&#xff0c;解决的是服务的注册和发现的问题&#xff0c;而zookeeper&#xff0c;Eureka都只是其中一款落地实现的产品&#xff0c;再比如Nacos也是如此&#xff0c;所以关键是掌握注册中心的工作原理&#xff0…

python2转python3代码_2to3 – 自动Python 2到3代码翻译 – 开发工具(Python教程)(参考资料)...

使用2to3 2to3通常与Python解释器一起安装为脚本。它也位于Python根目录的Tools/scripts目录下 2to3的基本参数是要转换的文件或目录列表。这些目录以递归方式遍历Python源. 这是一个示例Python 2.x源文件&#xff0c; def greet(name): print "Hello, {0}!".format(…