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

formik 的使用

礼记有言:独学而无友,则孤陋而寡闻
让我们一起了解更多便捷方法,缩短开发时间去摸鱼,嘿嘿。

框架:react
在写表单的时候,我不太喜欢把验证写的很繁琐,这里讲介绍,验证表单的非常好用的验证库:Formik + Zod 和 Formik + Yup 。
其实,react-hook-form +Zod 的 周下载量也超级高,不过我还是更喜欢Formik,这里react-hook-form 就不做介绍了,留给by搜索引擎需要form表单的公主or 王子 一个选择,礼记有言:教学相长。如果你有更好的方法,也可以分享给我哟,嘿嘿。

formik 的使用

radio请添加图片描述

import React from 'react';
import { useFormik } from 'formik';export function FormikStudyRadio() {const formik = useFormik({initialValues: {gender: '',},onSubmit: (values) => {alert(JSON.stringify(values, null, 2));},validate: (values) => {console.log(values.gender, '-')if (!values.gender) {return { gender: "请选择你的性别" };}console.log(values.gender);},});return (<form onSubmit={formik.handleSubmit} className='flex items-center gap-2'><label><inputtype="radio"name="gender"value="male"checked={formik.values.gender === 'male'}onChange={formik.handleChange}/></label><div><label><inputtype="radio"name="gender"value="female"checked={formik.values.gender === 'female'}onChange={formik.handleChange}/></label></div>{formik.touched.gender && formik.errors.gender ? (<div className='text-red-400'>{formik.errors.gender}</div>) : null}<button type="submit" className="p-2 border border-gray-400 ml-4 rounded-[8px]">Submit</button></form>);
}

checkbox

请添加图片描述

import React from "react";
import { useFormik } from "formik";export const FormikStudy = () => {const formik = useFormik({initialValues: {friends: [],},onSubmit: (values) => {alert(JSON.stringify(values, null, 2));},validate: (values) => {if (!values.friends.length) {return { friends: "Required!" };}console.log(values.friends);},});return (<div ><form onSubmit={formik.handleSubmit} className="[&>label]:text-xl [&>label]:mr-4 [&>label>input]:mr-1 text-left"><label><inputname="friends"type="checkbox"onChange={formik.handleChange}value="carrot"/>carrot</label><label><inputname="friends"type="checkbox"onChange={formik.handleChange}value="monet"/>monet</label><button className="p-2 border border-gray-400 ml-4 rounded-[8px]" type="submit">Submit</button></form><div className="text-red-600 text-sm text-left">{formik.errors.friends}</div></div>);
};

普通文本

Formik + Zod
请添加图片描述

import React from "react";
import { useFormik } from "formik";
import { z } from "zod";
import { withZodSchema } from "formik-validator-zod";const validationSchema = z.object({name: z.string().min(8, { message: "Must be 8 or more characters long" }),desc: z.string().nonempty(),email: z.string().email({ message: "Invalid email address" }),
})const valuesType = ["text", "text", 'email']type ValuesState = {name: string,desc: string,email: string
}
const initialValues: ValuesState = {name: '',desc: '',email: ''
}
export const FormikStudy2 = () => {const formik = useFormik({initialValues,validate: withZodSchema(validationSchema),onSubmit: (values) => {alert(JSON.stringify(values, null, 2));},});const errors: any = formik.errors.valueOf()return (<div><form onSubmit={formik.handleSubmit} className="flex flex-col gap-2 m-2">{Object.keys(initialValues).map((key, index) => <div key={index} className="flex flex-col items-start"><div><label htmlFor={`${key}`}>{key}:</label><inputclassName="border border-gray-400 p-1 ml-1 rounded-lg"id={`${key}`}// name={`${key}`}type={`${valuesType[index]}`}// onChange={formik.handleChange}// value={formik.values[`${key}`]}{...formik.getFieldProps(`${key}`)}/></div><div className="text-red-600 text-sm text-left">{formik.errors && formik.errors.hasOwnProperty(key) && errors[`${key}`]}</div></div>)}<button type="submit" className="w-[100px] p-2 border border-gray-400  rounded-[8px]">Submit</button></form></div>);
};

http://www.mrgr.cn/news/83090.html

相关文章:

  • vue3使用AntV X6 (图可视化引擎)历程[二]
  • Python在心血管医疗高维数据精准降维的应用:方法、应用与创新
  • UI自动化测试保姆级教程--pytest详解(精简易懂)
  • Tesseract5.4.0自定义LSTM训练
  • 【Qt】QtConcurrent
  • jenkins入门12-- 权限管理
  • 202305 青少年软件编程等级考试C/C++ 一级真题答案及解析(电子学会)
  • ESP32编译和双OTA分区问题
  • Ubuntu更改内核
  • 使用LinkedList手撕图的邻接表
  • eNSP之家----ACL实验入门实例详解(Access Control List访问控制列表)(重要重要重要的事说三遍)
  • (五)WebGL中vertexAttribPointer方法的使用详解
  • Linux系统中解决端口占用问题
  • STM32内置Flash
  • Vue3组件通讯——自定义事件(子->父)
  • C++和Python中负数取余结果的区别
  • python中的列表推导式详解
  • Django学习笔记之数据库(一)
  • 使用redis来进行调优有哪些方案?
  • 消息队列:原理、问题与设计全解析
  • Git撤销指定commit并更新远端仓库
  • 最近在盘gitlab.0.先review了一下docker
  • 总结2024,迎接2025
  • 江科大STM32入门——SPI通信笔记总结
  • leetcode热门100题1-4
  • 生成模型:变分自编码器-VAE