当前位置:首页 > 科技  > 软件

一款基于大量业务实践的轻量级高性能表单库

来源: 责编: 时间:2023-12-12 17:00:15 310观看
导读之前分享了很多可视化和低代码的技术实践, 最近技术圈友自荐了一款他们开发的基于 React 的高性能表单组件, 目前已经在各个产品线大量使用, 我体验了一下还是非常好用的, 设计思想也很值得学习, 这里就和大家分享一

之前分享了很多可视化和低代码的技术实践, 最近技术圈友自荐了一款他们开发的基于 React 的高性能表单组件, 目前已经在各个产品线大量使用, 我体验了一下还是非常好用的, 设计思想也很值得学习, 这里就和大家分享一下这款开源表单组件库——react-form-simple.Dty28资讯网——每日最新资讯28at.com

图片Dty28资讯网——每日最新资讯28at.com

背景

表单的受控控制一直是 react 里的一个痛点,当我们想要实现一个输入框的受控控制时,需要定义 onChange  value 属性,手动去实现数据的绑定。当受控的元素一多,便会出现满屏的 setDty28资讯网——每日最新资讯28at.com

作者所在的公司业务比较大,偏向于后台管理的 sass 系统,用户群体比较大。在日常需求中,表单的开发就占据了大部分场景,而在用 react 开发表单的时候,特别是当表单字段过于复杂,表单过于庞大时,开发受控表单也要投入不小的开发生产力和不少的受控代码,不说优雅和后期的维护,对于页面响应速度来说,也是会随着字段的增加而变的越来越慢,即使拆分成颗粒度最小的组件。Dty28资讯网——每日最新资讯28at.com

图片image.pngDty28资讯网——每日最新资讯28at.com

在一个表单业务中,字段A依赖于字段B,字段C又依赖于字段A的变化,而字段C追踪依赖后又要实时渲染在视图里。这是很常见的需求场景,当组织这些依赖的时候,随之而来的考虑的是一个性能问题,我们很常见的一个做法便是状态的提升,将它们都放到顶层容器中,统一管理。Dty28资讯网——每日最新资讯28at.com

但是这样会随着依赖的不断增加,造成当前渲染的树不断渲染,当越来越多的字段沉积,不断的重新渲染,最终会导致页面崩溃,内存溢出。Dty28资讯网——每日最新资讯28at.com

在这个过程中,我们通常需要定义一系列受控代码,以达到我们的预期。基于上述背景, 我们经过大量实践和推演, 设计出一款轻量且高性能的表单受控解决方案 —— React-form-simple.Dty28资讯网——每日最新资讯28at.com

图片Dty28资讯网——每日最新资讯28at.com


Dty28资讯网——每日最新资讯28at.com

特点介绍

图片image.pngDty28资讯网——每日最新资讯28at.com

  • 通过创建一个可观察对象来观察表单的模型操作, 表单项的受控直接通过_. 赋值。
  • 简单几行代码就可以完成表单受控, 无需关心受控逻辑, 无需关心受控过程, 只需要知道受控结果和如何应用你的受控状态。
  • 每个表单项之间的渲染自动完全隔离, 不需要自行组织组件隔离。这将能够更快的处理表单输入后的响应速度, 以及很大程度的避免在大型动态数据下造成的页面卡顿。
  • 具有数据观测功能, 可以在某些场景下对整个表单或者某个具体的表单项进行单一或者统一的观察监测, 可以在你需要用表单项最新的值进行渲染的地方进行值的订阅。
  • 灵活的使用方式, 灵活的页面布局组合, 开发者可以根据自己的喜好和场景使用某种方式以及内置布局。在大多数场景下, 无需开发者手动布局。
  • 简约的 API 设计, 在操作表单的过程中, 简单的只需要引入两个 API, 就可以完成大部分工作。
  • 高度可扩展的表单接口, 在一些复杂需求或者定制化场景中, 开发者可以自行定制表单的控制逻辑。
  • 可以轻易集成在你的 UI 或者 第三方库中。
  • 完整的类型推断。

安装与使用

  1. 安装
# yarn add react-form-simplenpm install react-form-simple
  1. 使用

图片image.pngDty28资讯网——每日最新资讯28at.com

代码如下:Dty28资讯网——每日最新资讯28at.com

import Button from '@components/Button';import React from 'react';import { useForm } from 'react-form-simple';export default function App() {  const { model, render, setState, validate } = useForm({    fields: [{ value: '', uid: 1 }],  });  const { fields } = model;  const renderFields = fields.map((field, i) =>    render(`fields.${i}.value`, {      label: `name${i}`,      labelPosition: 'top',      rules: { required: 'Please Input' },      key: field.uid,    })(<input className="input" />),  );  return (    <>      {renderFields}      <Button        notallow={() => {          const len = model.fields.length;          model.fields.push({ value: len + '', uid: len + 1 });          setState();        }}      >        add      </Button>      <Button        plain        style={{ marginLeft: '15px' }}        notallow={() => {          validate();          console.log(model);        }}      >        submit      </Button>    </>  );}

性能测试

通过笔者的测试, 一次创建500个表单项, 性能还是非常能打的, 如下:Dty28资讯网——每日最新资讯28at.com

图片image.pngDty28资讯网——每日最新资讯28at.com

测试覆盖率

图片image.png图片image.pngDty28资讯网——每日最新资讯28at.com

最后

图片image.pngDty28资讯网——每日最新资讯28at.com

如果大家对这个开源库的实现方案或者想体验一下这款开源项目, 也欢迎使用反馈, 让这款表单库更加健壮.Dty28资讯网——每日最新资讯28at.com

  • github: https://github.com/easy-form/react-form-simple
  • 文档地址: https://easy-form.github.io/react-form-simple

本文链接:http://www.28at.com/showinfo-26-43287-0.html一款基于大量业务实践的轻量级高性能表单库

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python中Subprocess库的用法详解

下一篇: DiffUtil和它的差量算法

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • 2299元起!iQOO Pad开启预售:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其搭载了天玑
Top