当前位置: 首页 > news >正文

简单介绍 React Native 整合 Formik 实现表单校验

Formik 是 React 和 React Native 开源表单库,Formik 负责处理重复且烦人的事情——跟踪值/错误/访问的字段、编排验证和处理提交——所以您不必这样做。而简化字段校验的话我们可以使用yup工具来实现。

首先安装FormikYup

npm i formik
npm i yup

Formik 与 React Native 简单实例

首先我们先实现一个简单的实例,体验一下Formik框架的使用过程。

export default function FormikCheck() {return (<View style={styles.container}><Text style={styles.mainTitle}>表单校验</Text><FormikinitialValues={{ email: "" }}onSubmit={(values) => console.log(values)}>{/* 渲染属性 */}{({ handleChange, handleBlur, handleSubmit, values }) => (<View><TextInputstyle={styles.inputItem}onChangeText={handleChange("email")}onBlur={handleBlur("email")}value={values.email}/><Button onPress={() => handleSubmit()} title="提交表单" /></View>)}</Formik></View>);
}const styles = StyleSheet.create({container: {flex: 1,padding: 10,},mainTitle: {fontSize: 20,paddingBottom: 10,borderBottomWidth: 1,borderBottomColor: "#e3e3e3",marginBottom: 10,},inputItem: {padding: 10,borderBottomWidth: 1,borderBottomColor: "#e3e3e3",marginBottom: 10,},
});

Formik 常用属性和方法说明

通过上述的例子可以看到,我们使用的是Formik框架中的Formik组件来包裹表单元素从而进行表单的是有相关操作。

Formik组件每个渲染方法常用的属性有如下几个:

属性类型说明
errors{ [field: string]: string }表单错误信息,所有表单对应的字段校验错误信息都在这个对象中
handleReset() => void重置处理程序。将表单重置为其初始状态
handleSubmit(e: React.FormEvent) => void提交处理程序

Formik组件常用的方法和属性有如下几个:

方法 / 属性参数说明
initialValuesValues表单的初始字段值
validationSchemaSchema 或者 (() => Schema)Yup 模式或返回 Yup 模式的函数。这用于验证。错误通过键映射到内部组件的错误。它的键应该与值的键匹配。
onReset(values: Values, formikBag: FormikBag) => void表单重置处理程序
onSubmit(values: Values, formikBag: FormikBag) => void Promise表单提交处理程序

Formik 与 yup 一起使用进行表单校验

Formik框架只是为我们简化表单的操作,当出现表单字段特别多的时候,我们一个一个字段进行表单字段值的校验这很麻烦,所以我们可以使用yup工具来帮我们简化校验流程。具体实例如下:

const userSchema = Yup.object().shape({email: Yup.string().email("Invalid email address"),
});export default function FormikCheck() {return (<View style={styles.container}><Text style={styles.mainTitle}>表单校验</Text><FormikinitialValues={{ email: "" }}onSubmit={(values) => console.log(values)}validationSchema={userSchema}>{/* 渲染参数 */}{({handleChange,errors,handleSubmit,values,dirty,handleReset,}) => (<View><TextInputstyle={styles.inputItem}onChangeText={handleChange("email")}value={values.email}/>{errors.email ? <Text>{errors.email}</Text> : ""}<ButtononPress={() => {console.log(dirty);handleSubmit();}}title="提交表单"/><Button onPress={() => handleReset()} title="重置" /></View>)}</Formik></View>);
}
http://www.lryc.cn/news/137085.html

相关文章:

  • 蓝帽杯半决赛2022
  • 电路学习+硬件每日学习十个知识点(40)23.8.20 (希腊字母读音,阶跃信号和冲激信号的关系式,信号的波形变换,信号的基本运算,卷积积分,卷积和)
  • Python——列表(list)推导式
  • 代码随想录算法训练营day43 | LeetCode 1049. 最后一块石头的重量 II 494. 目标和 474. 一和零
  • Linux安装jdk、mysql、并部署Springboot项目
  • tomcat更改端口号和隐藏端口号
  • 生信分析Python实战练习 2 | 视频19
  • wps设置其中几页为横版
  • 如何在Ubuntu 22.04上安装PHP 8.1并设置本地开发环境
  • wazuh安装与使用
  • Vue 3 常见面试题汇总
  • Docker是什么?详谈它的框架、使用场景、优势
  • neo4j
  • 【项目 计网5】 4.15 TCP通信实现(服务器端)4.16 TCP通信实现(客户端)
  • windows可视化界面管理服务器上的env文件
  • 自然语言处理在智能客服和聊天机器人中的应用
  • 为什么不建议使用@Async注解创建线程
  • 更新Ubuntu18.04上的CUDA和GCC
  • 算法通过村第6关【青铜】| 如何通过中序和后序遍历恢复二叉树
  • 高斯牛顿法和LM算法异同示例
  • 奥威BI财务数据分析方案:只做老板想看的
  • opencv进阶19-基于opencv 决策树cv::ml::DTrees 实现demo示例
  • Unity通过TCP/IP协议进行通信
  • 基于VuePress搭建知识库
  • odoo安装启动遇到的问题
  • 【Flink】Flink提交流程
  • 哪种英特尔实感设备适合您?
  • C++11的四种强制类型转换
  • 分布式事务(4):两阶段提交协议与三阶段提交区别
  • React源码解析18(9)------ 实现多节点渲染【修改beginWork和completeWork】