React Hook Form vs Redux Form

news/2025/1/24 17:51:43/文章来源:https://www.cnblogs.com/billyu/p/18689871

(公众号同步文章:https://mp.weixin.qq.com/s/IUAldltW9ywZ9kXB-NCDxA)

Redux Form 想必 React 开发者们非常熟悉,在 Redux 流行的那几年里,Redux Form 是表单页面的标配,但是随着前端的发展与成熟,一些过渡设计的理念逐渐被大家抛弃,Redux 就是便是其中之一。
在大型的前端应用中,全局的数据管理一直是个比较棘手的问题,Redux 在这种场景下发挥了它的的优势,但微前端的组织模式流行起来后,我们的巨石应用逐渐分拆成了一个个的小型应用,Redux 由于其过多的样板代码以及性能问题,继续使用的必要性就不大了,完全可以使用 React 自带的 Provider 代替,依赖 Redux 的 React From 自然也有其他更好的选择。
从三个最流行的表单库下载量趋势图中可以看到,React Hook Form 自 2022 年领先后就一路向上不回头了,事实也证明它真的好用。

“Performant, flexible and extensible forms with easy-to-use validation”
上面是 React Hook Form 官网的一句概括,翻译过来是“高效、灵活且可扩展的表单,具有易于使用的验证功能”。

和 Redux Form 对比:

何时选择 React Hook Form:
中小型应用程序,配置简单,开发效率高。
重点考虑性能和包大小的项目。
具有简单到中等复杂程度验证逻辑的表单。

何时选择 Redux Form:
已经使用了 Redux 的大型项目。
需要与全局应用程序状态进行交互的表单。
需要大量自定义验证和规范化的场景。
需要跟踪表单数据的变化,比如使用 Redux 浏览器插件查看数据。

使用样例

React Hook Form:

`
import React from 'react';
import { useForm } from 'react-hook-form';

function SimpleForm() {
const { register, handleSubmit, errors } = useForm();

const onSubmit = (data) => {
console.log(data);
};

return (


<input
name="email"
ref={register({
required: 'Email is required',
pattern: {
value: /^\S+@\S+$/i,
message: 'Invalid email format'
}
})}
/>
{errors.email && {errors.email.message}}

  <input name="password" type="password" ref={register({ required: 'Password is required' })} />{errors.password && <span>{errors.password.message}</span>}<button type="submit">Submit</button>
</form>

);
}
`

Redux Form:

`
import React from 'react';
import { Field, reduxForm } from 'redux-form';

const validate = values => {
const errors = {};
if (!values.email) {
errors.email = 'Email is required';
} else if (!/^\S+@\S+$/i.test(values.email)) {
errors.email = 'Invalid email format';
}
if (!values.password) {
errors.password = 'Password is required';
}
return errors;
};

const renderField = ({ input, label, type, meta: { touched, error } }) => (

{touched && error && {error}}
);

const SimpleForm = props => {
const { handleSubmit } = props;
return (





);
};

export default reduxForm({
form: 'simple',
validate
})(SimpleForm);
`

多数场景下,笔者倾向使用 React Hook Form,它使用了 React hooks 的风格,简单易用性能好,不依赖其他库。

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

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

相关文章

深度学习基础理论————CV中常用Backbone(Resnet/Unet/Vit系列/多模态系列等)以及代码

主要介绍在CV中常用的Backbone原理简易代码(代码以及原理经常更新),参考论文中的表格,对不同的任务所使用的backbone如下:针对上面内容分为两块内容:1、基于卷积神经网络的CV Backbone:1.Resnet系列;2.Unet系列等;2、基于Transformer的 CV Backbone:1.Vit系列等;3、在…

BUUCTF刷题-Web方向1~5wp

[极客大挑战 2019]EasySQL 一个sql注入登录框,直接万能密码登录拿到flag[极客大挑战 2019]Havefun 打开环境,没有任何信息,查看源码,发现这么一段代码GET方式传入一个cat请求,并且变量值为dog,即?cat=dog,得到flag[HCTF 2018]WarmUp 打开环境,是一张图片,查看源码发现…

99%的人不知道,桥接模式失败的真正原因是它!

前言 大家好,我是VoltCary 最近做一些基础设施的部署工作,以手上的kali linux作为集群的节点,因为用到的是虚拟机,且本机网络为无线wifi,现在希望虚拟机像正常独立主机存在网络中,因此不能像正常本地主机一样直接加入网段节点,虚拟机还需要进行网络的配置。 让虚拟机成为…

Orleans框架升级指南(3.6.5--8.0.0)

升级指南 官方升级指南 https://learn.microsoft.com/zh-cn/dotnet/orleans/migration-guide?source=recommendations主要涉及以下几个改动点ConfigureApplicationParts3.6.5版在Silo初始化的时候,会通过这个方法将指定目录下的Grain加载进来.ConfigureApplicationParts(part…

AtCoder Beginner Contest 386

A - Full House 2 题意给\(4\)个整数,问能否添加一个整数使得恰有\(3\)个整数\(a\)和\(2\)个整数\(b\)思路模拟代码点击查看代码 #include <bits/stdc++.h> using namespace std; #define int long long typedef pair<int, int> pii;const int mxn = 1e6 + 5;void…

Iceberg治理服务Amoro---配置Prometheus + Grafana看板

一、基础资料 1、mac安装Prometheus + Grafana https://www.cnblogs.com/robots2/p/18689540 2、配置文档 https://amoro.apache.org/docs/0.7.1/deployment/#configure-metric-reporter 3、Grafana配置内容 https://github.com/apache/amoro/blob/master/grafana/dashboard.js…

【Python】查找两个表格是否存在相同元素

其实就是字典的应用,把其中一个表格做成字典(将需要查询的元素设为字典的键),然后读取另一个表格逐个在字典中查找 表1:表2:import openpyxlwb1 = openpyxl.load_workbook(r"C:\Users\Lenovo\Desktop\表1.xlsx") ws1 = wb1["Sheet1"] wb2 = openpyxl…

git分支提交,提PR

远程分支xxx,临时分支tmp_xxx git checkout -b tmp_xxx   #创建并进入临时分支 git pull origin xxx      #更新本地code git add .          git commit -m "test pr" git push --set-upstream origin tmp_xxx #github上现在能看到这个临时…

Hibernate Validator 国际化开启快速校验配置

这里默认你已经配置好了国际化,如需配置可以参考 网上其他配置,这里只做快速失败国际化配置@Configuration public class ValidConfig {@Beanpublic Validator validator() {     // 这里是读取你的国际化配置文件做缓存MessageInterpolator messageInterpolator = new R…

AQS学习笔记

一、使线程进入等待状态和唤醒状态的三种方法 1、使用Object中的wait()方法让线程等待,使用Object中的notify()方法唤醒线程,需配合synchronized关键字使用 2、使用JUC包中的Condition的await()方法让线程等待,使用signal()方法唤醒线程 3、LockSupport类可以阻塞当前线程以…

Oracle安装指南 Xming远程桌面

安装Xming然后使用Oracle用户连接登录,设置DISPLAY环境变量(IP地址为你的windows客户端IP地址) export DISPLAY=192.168.111.155:0.0然后执行dbca就会弹出数据库配置界面了参考链接:https://www.cnblogs.com/iancloud/p/15015683.html

P4070 [SDOI2016] 生成魔咒

P4070 [SDOI2016] 生成魔咒 题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示。例如可以将魔咒字符 \(1,2\) 拼凑起来形成一个魔咒串 \([1,2]\)。 一个魔咒串 \(S\) 的非空字串被称为魔咒串 \(S\) 的生成魔咒。 例如 \(S=[1,2,1]\) 时,它的生成魔咒有 \([1],[2],[1…