成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一款基于大量業務實踐的輕量級高性能表單庫

開發 前端
簡單幾行代碼就可以完成表單受控, 無需關心受控邏輯, 無需關心受控過程, 只需要知道受控結果和如何應用你的受控狀態。

之前分享了很多可視化和低代碼的技術實踐, 最近技術圈友自薦了一款他們開發的基于 React 的高性能表單組件, 目前已經在各個產品線大量使用, 我體驗了一下還是非常好用的, 設計思想也很值得學習, 這里就和大家分享一下這款開源表單組件庫——react-form-simple.

圖片

背景

表單的受控控制一直是 react 里的一個痛點,當我們想要實現一個輸入框的受控控制時,需要定義 onChange  value 屬性,手動去實現數據的綁定。當受控的元素一多,便會出現滿屏的 set

作者所在的公司業務比較大,偏向于后臺管理的 sass 系統,用戶群體比較大。在日常需求中,表單的開發就占據了大部分場景,而在用 react 開發表單的時候,特別是當表單字段過于復雜,表單過于龐大時,開發受控表單也要投入不小的開發生產力和不少的受控代碼,不說優雅和后期的維護,對于頁面響應速度來說,也是會隨著字段的增加而變的越來越慢,即使拆分成顆粒度最小的組件。

圖片image.png

在一個表單業務中,字段A依賴于字段B,字段C又依賴于字段A的變化,而字段C追蹤依賴后又要實時渲染在視圖里。這是很常見的需求場景,當組織這些依賴的時候,隨之而來的考慮的是一個性能問題,我們很常見的一個做法便是狀態的提升,將它們都放到頂層容器中,統一管理。

但是這樣會隨著依賴的不斷增加,造成當前渲染的樹不斷渲染,當越來越多的字段沉積,不斷的重新渲染,最終會導致頁面崩潰,內存溢出。

在這個過程中,我們通常需要定義一系列受控代碼,以達到我們的預期?;谏鲜霰尘? 我們經過大量實踐和推演, 設計出一款輕量且高性能的表單受控解決方案 —— React-form-simple.

圖片


特點介紹

圖片image.png

  • 通過創建一個可觀察對象來觀察表單的模型操作, 表單項的受控直接通過_. 賦值。
  • 簡單幾行代碼就可以完成表單受控, 無需關心受控邏輯, 無需關心受控過程, 只需要知道受控結果和如何應用你的受控狀態。
  • 每個表單項之間的渲染自動完全隔離, 不需要自行組織組件隔離。這將能夠更快的處理表單輸入后的響應速度, 以及很大程度的避免在大型動態數據下造成的頁面卡頓。
  • 具有數據觀測功能, 可以在某些場景下對整個表單或者某個具體的表單項進行單一或者統一的觀察監測, 可以在你需要用表單項最新的值進行渲染的地方進行值的訂閱。
  • 靈活的使用方式, 靈活的頁面布局組合, 開發者可以根據自己的喜好和場景使用某種方式以及內置布局。在大多數場景下, 無需開發者手動布局。
  • 簡約的 API 設計, 在操作表單的過程中, 簡單的只需要引入兩個 API, 就可以完成大部分工作。
  • 高度可擴展的表單接口, 在一些復雜需求或者定制化場景中, 開發者可以自行定制表單的控制邏輯。
  • 可以輕易集成在你的 UI 或者 第三方庫中。
  • 完整的類型推斷。

安裝與使用

  1. 安裝
# yarn add react-form-simple
npm install react-form-simple
  1. 使用

圖片image.png

代碼如下:

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個表單項, 性能還是非常能打的, 如下:

圖片image.png

測試覆蓋率

圖片image.png圖片image.png

最后

圖片image.png

如果大家對這個開源庫的實現方案或者想體驗一下這款開源項目, 也歡迎使用反饋, 讓這款表單庫更加健壯.

責任編輯:武曉燕 來源: 趣談前端
相關推薦

2018-01-17 15:05:22

框架設計爬蟲Scrapy

2025-06-27 10:41:04

Redis數據庫集群

2022-07-14 11:31:04

SQLToolsVScode數據庫

2021-10-27 11:29:32

框架Web開發

2022-01-24 11:02:27

PySimpleGUPython計算器

2013-11-28 15:02:34

Ubuntu技巧Geary

2024-06-07 10:34:28

Rust開發工具

2025-04-25 05:00:00

StarRocks開源數據倉庫

2017-10-11 16:12:19

內存

2021-09-26 16:31:18

滑動驗證碼開發組件設計

2020-10-13 18:09:22

開發框架開源

2025-01-26 15:44:29

2024-01-03 07:42:49

分割模型高性能

2023-06-28 14:01:13

攜程實踐

2022-02-25 14:57:33

harmonyOSjava心形動畫

2015-06-01 07:02:12

云集群高性能計算

2020-12-30 09:20:26

Redis數據庫開源

2021-02-21 17:35:31

Viper瀏覽器開源

2021-04-14 13:32:50

Redis輕量級分布式

2022-05-26 10:12:21

前端優化測試
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日本一区二区 | 亚洲一区二区三区视频 | 精品国产久 | 日韩中文字幕 | 精品国产一区一区二区三亚瑟 | 国产片侵犯亲女视频播放 | 国产精品久久久久久模特 | 日日干综合 | 日韩精品在线一区 | 黄色一级大片在线免费看产 | 国产一区免费视频 | 国产精品成人av | 日韩五月天 | h片在线看 | 永久精品| 91.xxx.高清在线 | www.色53色.com| 久久亚洲免费 | 日韩视频在线免费观看 | 一区二区三区在线播放视频 | a毛片 | 色综合色综合色综合 | 色视频网站 | 91久久伊人 | 久久国产精品一区 | 99热热热热| 草久久 | 国产日批| 天天操天天玩 | 欧美另类视频 | 黄色香蕉视频在线观看 | 国产精品久久久久久久久久久久 | 国产精品视频一区二区三区不卡 | 欧美精品久久久 | 中国大陆高清aⅴ毛片 | 国产一级淫片免费视频 | 99在线视频观看 | 日本欧美国产 | 国产视频第一页 | 91视频进入 | 久久丁香 |