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…

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;可以支持对时间的高效计算、对比、格式化显示。对这类数组的操作方法和对普通数组的操作是基本一致的。下…

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

前言&#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…

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

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

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…

文本表示

1 one-hot representation 该单词对应所在元素为1&#xff0c;向量中其他元素均为0&#xff0c;向量的维度就等于词库中的单词数目  所有向量都是互相正交的&#xff0c;我们无法有效的表示两个向量间的相似度  向量维度过大。 from sklearn.feature_extraction.text…

天池 在线编程 课程表(拓扑排序 + 回溯)

文章目录1. 题目2. 解题1. 题目 总共有n个课程&#xff0c;从0到n-1。 有些课程可能有先决条件&#xff0c;例如&#xff0c;你想修课程0&#xff0c;你必须先修一门课程1&#xff0c;这两门课之间的关系表示为:[0,1] 给定课程的总数和先决条件对的列表&#xff0c;返回你可以…

java 父子级json组装不用递归_2020面试阿里Java研发岗题库总结,想虐面试官不能错过的面试宝典...

前言:虽然天猫&#xff0c;蚂蚁金&#xff0c;菜鸟都归属阿里旗下&#xff0c;但每个面试官问的问题都不一样&#xff0c;相同点主要在流程方面。面试开始会让自我介绍&#xff0c;主要业务架构和技术架构两部分。业务架构一般不会深究&#xff0c;但要面试官听明白&#xff0c…

LeetCode 1748. 唯一元素的和

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 。 数组中唯一元素是那些只出现 恰好一次 的元素。 请你返回 nums 中唯一元素的 和 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,2] 输出&#xff1a;4 解释&#xff1a;唯一元素为 [1,3] &#xff0c;和为 4…

朵唯机器人怎么连网_平遥古城推出机器人导游 可伴游还可骑行

近日&#xff0c;一组集景点讲解、语音互动等多种功能于一身的机器人亮相平遥古城&#xff0c;引发游客关注。2月27日&#xff0c;北京青年报记者从景区旅游公司处了解到&#xff0c;这批机器人导游已经上岗5天&#xff0c;主要是为了填补下午5点人工导游下班后&#xff0c;古城…

评论数据获取、词频统计、词云图

# coding: utf-8 # In[2]: import urllib.request import re import requests import time import random import json # 设置请求头 headers (User-Agent, Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537…