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

乌鲁木齐专业网站建设/专业的营销团队哪里找

乌鲁木齐专业网站建设,专业的营销团队哪里找,太原推广型网站制作,广州哪里做公司网站号简介 官方示例工程formik-09x-synchronous-validation-example展示的是基于Formik的表单开发中如何进行定制的同步校验的问题。 Basics实例相关内容回顾 回顾一下第一个示例Basics,其中有下面代码: const EnhancedForm withFormik({mapPropsToValues: (…

简介

官方示例工程formik-09x-synchronous-validation-example展示的是基于Formik的表单开发中如何进行定制的同步校验的问题。

Basics实例相关内容回顾

回顾一下第一个示例Basics,其中有下面代码:

const EnhancedForm = withFormik({mapPropsToValues: () => ({ email: '' }),validationSchema: Yup.object().shape({email: Yup.string().email('Invalid email address').required('Email is required!'),}),handleSubmit: (values, { setSubmitting }) => {setTimeout(() => {alert(JSON.stringify(values, null, 2));setSubmitting(false);}, 1000);},displayName: 'BasicForm', // helps with React DevTools
})(MyInnerForm);

在上面代码片断中,理解mapPropsToValues属性的作用对于理解Formik全局有极为重要的意义。注意,在这里它返回了一个props对象(本例中是{ email: '' })。正是由于这一映射(即转换操作),才有了其他对应位置接下来的values.email(即props.values.email)引用。
其次,在实现表单数据校验方面,使用了下面代码:

validationSchema: Yup.object().shape({email: Yup.string().email('Invalid email address').required('Email is required!'),}),

这个validationSchema是使用Yup这个开源JS校验工具库所要求的。注意到,在判断一个字符串是否是一个有效的Email地址时,它使用了内置于Yup库的判断方式(调用email()方法进行判定——而并没有使用原始的正则表达式判定方式。

【问题】这里预留一个问题供朋友们思考:上面Yup校验是同步的还是异步的?

定制型表单同步校验

本文案例给出的正是Formik支持下的表单同步校验支持方案。关键代码如下:

const MyEnhancedForm = withFormik({mapPropsToValues: () => ({ email: '' }),// Custom sync validationvalidate: values => {let errors = {};if (!values.email) {errors.email = 'Required';} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.email)) {errors.email = 'Invalid email address';}return errors;},handleSubmit: (values, { setSubmitting }) => {setTimeout(() => {alert(JSON.stringify(values, null, 2));setSubmitting(false);}, 1000);},displayName: 'BasicForm', // helps with React DevTools
})(MyForm);

其实,这里关键是理解validate这个属性(withFormik()方法的参数是一个可配置对象,validate则是该对象的属性之一)。根据官方文件介绍,这个属性是实现定制同步校验编程的关键思路。而且注意到,上面代码中使用非常原始的正则表达式方案校验电子邮件地址格式正确与否。
如果把这里的思路放开一些,即可以通过判定values.email,values.someotherfield......来进行其他众多的字段内容校验判定。也就是由于这一思路,我们注意到没有必要再和redux-form中那样实现专门的字段级别校验了。

异步校验

尽管官方没有给出完整独立的表单异步校验案例,但是官方文档再介绍withFormik的validate属性用法时一并提供了同步校验和异步校验的例子,不过都是使用了定制校验方式:

// Synchronous validation
const validate = (values, props) => {let errors = {};if (!values.email) {errors.email = 'Required';} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.email)) {errors.email = 'Invalid email address';}//...return errors;
};// Async Validation
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));const validate = (values, props) => {return sleep(2000).then(() => {let errors = {};if (['admin', 'null', 'god'].includes(values.username)) {errors.username = 'Nice try';}// ...if (Object.keys(errors).length) {throw errors;}});
};

其实,Formik作者极力推荐的Yup方案(结合validationSchema的使用)就是一种极其简洁的异步校验方案。当然,示例Basics中的代码比较隐蔽;更直观的异步校验代码片段如下:

const numSchema = yup.number();
const validator = (val) => {numSchema.validate(val).then(result => {console.log(result); // it is the value of `val`return true;}).catch(error => {console.log(error.errors); // array of validation error messagesreturn false;});
};

相信你能够轻松地把上面代码片段修改后添加到withFormik这个HOC函数代码当中。

引用

1,著名开源JS校验工具Yup(https://github.com/jquense/yup);
2,https://github.com/jaredpalmer/formik#validationschema-schema--props-props--schema
3,https://til.hashrocket.com/posts/35a5bwlxn7-yup-schemas-are-validated-asynchronously

http://www.lbrq.cn/news/1119277.html

相关文章:

  • 游戏网站做关键字/龙岗网站设计
  • cdn网站网络加速器/网页开发
  • 武汉网站制作/成都最新数据消息
  • 做网站现在还行吗/搜索引擎营销经典案例
  • 南阳做网站电话/软文发布
  • 网站建设产品展示型的/怎么快速优化关键词
  • 诏安县建设局网站/如何做推广最有效果
  • 直播网站建设需要多少钱/百度网站推广怎么做
  • 一个专业做设计的网站/软文广告经典案例300字
  • 网站优化排名怎么做/厦门seo排名优化公司
  • 潍坊网站建设价格/全网营销平台
  • 承德网站建设公司/百度快照怎么打开
  • 全国新农村建设中心网站/免费b站推广入口
  • 山东省城市建设管理协会网站/军事新闻最新消息
  • 工程项目管理软件 免费/seo网络推广外包公司
  • 石家庄模板建站行业解决方案/网站开发的步骤
  • 网站开发wbs模板/云南seo
  • 创新的企业网站开发/镇江网页设计
  • 网站排名搜索/域名申请
  • 财务公司管理系统/抖音搜索seo排名优化
  • 南宁网站建设方案服务/厦门seo外包公司
  • 网站建设数据库是什么意思/广告位招商怎么找客户
  • 网站建设专家/近两年网络营销成功案例
  • 带孩子做网站/企业推广平台排行榜
  • 在线定制logo/西安网站seo诊断
  • 旅游网站设计模板图片/文娱热搜榜
  • 民宿客栈网站制作/宝鸡seo排名
  • 济南外贸网站建设公司/杭州网站优化多少钱
  • 深圳购物商城网站建设/某网站seo策划方案
  • wordpress网站打不开/裤子seo标题优化关键词
  • MAC 苹果版Adobe Photoshop 2019下载及保姆级安装教程!!
  • 【RTSP从零实践】13、TCP传输AAC格式RTP包(RTP_over_TCP)的RTSP服务器(附带源码)
  • 已知均数与标准差,如何生成一组正态分布数据?
  • 【网络安全】大型语言模型(LLMs)及其应用的红队演练指南
  • 进程探秘:从 PCB 到 fork 的核心原理之旅
  • Spring Boot - Spring Boot 集成 MyBatis 分页实现 RowBounds