Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用多个验证架构并呈现窗体的拆分视图

如何使用多个验证架构并呈现窗体的拆分视图
EN

Stack Overflow用户
提问于 2019-03-28 11:54:31
回答 1查看 3.9K关注 0票数 1

我知道这可能是一个单一的问题,甚至是二分之一的问题,但请相信我,当我说这两个问题不能单独回答。请记住这一点。谢谢你抽出时间..。

我的问题围绕着我目前面临的一个特殊情况。我正在使用withFormik H.O.C和Yup一起处理我的表单中的各种案例,比如提交、errorHandling,以及更多(取决于具体情况)。

通常,我的表单情况涉及创建和编辑模式。

onCreate =>传递默认值并从我的服务调用POST方法。

onEdit =>使用来自服务器的当前项值填充值,并从服务调用PUT方法。

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  const validationSchema = Yup.object().shape({
    username: Yup.string('Provide a Username').required('Username is Required'),
    email: Yup.string().email('Provide a Valid email Address'),
    password: Yup.string('Provide a Password').required('Password is required'),
    confirmPassword: Yup.string('Provide your password again')
      .required('Password Confirmation is Required')
      .oneOf([Yup.ref('password')], 'Passwords do not match'),
  });

  const EnchancedCreateUserForm = withFormik({
    mapPropsToValues: ({
      user = {
        username: '',
        email: '',
        password: '',
        confirmPassword: '',
      }
    }) => ({ ...user }),

    validationSchema,

    handleSubmit: (values, { props, setSubmitting }) => {
      const { doSubmit, onSave, inEditMode } = props;

      const saveUser = inEditMode ? updateUser : createUser;
      return doSubmit(saveUser, values)
        .then(() => {
          setSubmitting(false);
          onSave();
        })
        .catch(() => {
          setSubmitting(false);
        });
    },

    displayName: 'AddEditUser'
  })(AddEditUser);

这实际上对我很有用,因为我的Create和Edit表单是相同的。这是我的两个问题。

当前情况我目前的表单实现有两个视图。一个统一的在创建与这4个字段,和编辑,我有两个表单。一个用于passwordChange,另一个用于infoChange。这让我面临以下问题。

我需要3 FormValidationSchemas(创建,编辑-信息,编辑-密码)。我甚至不确定他是否支持。确切地说,我应该如何处理其余的功能,onSubmit,ErrorMessage,用于字段错误和statusError?如果你真的能帮我想出一种攻击的方法,那就太好了。

我读取了validationSchema可以传递一个返回validationSchema的函数,所以我这样做了,但是它不起作用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  const validationFullSchema = Yup.object().shape({
    username: Yup.string('Provide a Username').required('Username is Required'),
    email: Yup.string().email('Provide a Valid email Address'),
    password: Yup.string('Provide a Password').required('Password is required'),
    confirmPassword: Yup.string('Provide your password again')
      .required('Password Confirmation is Required')
      .oneOf([Yup.ref('password')], 'Passwords do not match'),
  });

  const validationEditSchema = Yup.object().shape({
    username: Yup.string('Provide a Username').required('Username is Required'),
    email: Yup.string().email('Provide a Valid email Address'),
  });

 const validationSchemaFn = () => {
     If ( efitMode ) {
       return validationCreateSchema

}返回validationEditSchema }

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  validationSchema: validationSchemaFn(),
  // Which throws an error
  // Failed to load app. Error: Cannot read property 'props' of undefined

我可能做错了什么,但我把它放在这里以防万一。

我对这件事的看法

  • 创建2个表单组件(PasswordFormComponent,InfoFormComponent),并使用H.O.C包装每个组件,允许它们独立地访问withFormik。
  • 对于CreateForm,将其转换为容器组件,从而呈现这两个组件
  • 对于Edit,不要调用当前正在发生的整个表单,而是为每种情况调用特定的组件。

你对我提出的解决方案有什么看法?如果您喜欢,可以让它更好,或者帮助一些代码示例,特别是在多个validationSchemas问题上。谢谢你!!

EN

回答 1

Stack Overflow用户

发布于 2020-08-04 22:41:03

您应该只创建一个formik表单。从调用表单组件的位置开始,将操作作为创建的1和编辑的2传递为1。从道具,如果你得到2,不要显示密码组件。休息是可见的。使用相同的验证架构,为密码提供一些静态值,并在编辑时确认密码,这样模式就可以提交表单。只需更改请求体,分别用于创建和编辑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55405881

复制
相关文章
类的受保护属性
创建类时我们希望部分属性不能被外部修改,即创建类的受保护属性。受保护属性可以在类以及子类中读取修改,而外部不能读取。
玖柒的小窝
2021/10/05
8710
图片介质受写入保护_写入保护
最近使用U盘,突然不能正常使用了,在U盘内新建文件夹,提示“介质受写入保护”无法创建文件,赶紧网上查找解决办法。查找的结果比解释比较全面的就是:
全栈程序员站长
2022/11/17
6.3K0
图片介质受写入保护_写入保护
什么是受 DRM 保护的内容?
简介:当谈到数字媒体世界中的内容时,您当然需要借助 DRM(数字版权管理)技术来保护您的创作或内容。让我们简要了解什么DRM以及什么是受 DRM 保护的内容。
inthemostwantedsea
2023/03/20
3.4K1
什么是受 DRM 保护的内容?
使用Backstab终止受保护的进程
Backstab是一款功能强大的安全研究工具,在该工具的帮助下,广大研究人员可以轻松终止那些受反恶意软件产品保护的进程。
FB客服
2021/08/24
1.3K0
Excel: 受保护的工作表使用筛选功能
文章背景:工作生活中,有时很多人都会用到同一份模板文件。为了防止文件内的公式被修改,以及单元格的误删除,往往都会给文件设置保护。受保护的同时,希望可以正常使用筛选等功能。
Exploring
2022/09/20
3.8K0
Excel:  受保护的工作表使用筛选功能
通过XSS跨子域拿到受HttpOnly保护的Cookie
因为浏览器同源策略的关系,只有同协议、域名、端口的页面才能进行交互,否则会被浏览器拒绝。现有两个页面,分别为111.example.com和example.com,两个页面是不同的域名,不能进行交互,但是可以在111.example.com使用以下代码设置同域,这样即可实现一个跨子域的交互。
潇湘信安
2021/07/01
1.8K0
Python - 面向对象编程 - 公共属性、保护属性、私有属性
无论是类对象还是实例对象,都可以通过 ._类名__名称 来调用私有属性、方法,这算是一种间接调用
小菠萝测试笔记
2021/09/07
2.2K0
什么是受 DRM 保护的 WMA 文件以及如何打开它们
简介: 使用 DRM 技术的文件格式之一是 Windows Media Audio (WMA)。在本文中,我们将探讨什么是受 DRM 保护的 WMA 文件、它们的工作原理以及如何在不同设备上播放它们。
inthemostwantedsea
2023/05/23
1.3K0
什么是受 DRM 保护的 WMA 文件以及如何打开它们
openFileDialog的Filter属性设置
OpenFileDialog对话框的Filter属性说明:          首先说明一个示例,分析一下Filter属性的构成:“ Excel文件|*.xls ”,前面的“Excel文件”成为标签,是一个可读的字符串,可以自定定义,“|*.xls”是筛选器,表示筛选文件夹中后缀名为.xls的文件,“*”表示匹配Excel文件名称的字符串。          OK,下面说说我们经常要用到的几种情况: 1.  Filter是null或Empty,表示显示所有文件,并总会显示文件夹 2. 需要筛选特定的文件,设置
hbbliyong
2018/03/06
2.4K0
线程属性设置
本文将通过一个创建n个线程的案例来展示一下线程属性的设定及使用,通常情况下,系统对于线程的创建是没有限制的,但是每一个线程都是需要一个栈空间的,每个栈空间大小也都是固定的,可通过系统命令 ulimit -a 来查看,如果线程栈空间的总数超过了一个进程可使用的虚拟内存用户空间,那么就无法再继续创建线程了。我们只是做一个小的测试,调整每个线程的栈空间大小来揭露线程属性的使用方法,并提高一个程序创建线程的数量(Notice:提高线程数量并没有什么好处,我们只是为了演示如何修改线程属性)。
我与梦想有个约会
2023/10/20
1910
线程属性设置
"隐藏受保护的操作系统文件"的注册表键值
        隐藏所有文件那个项经常处理,都能记得了, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\NOHIDDEN         把dword改成reg_s
用户1075292
2018/01/23
1.2K0
zepto中的属性设置
在分析这里的时候,一直很困惑,为什么实例化dom之后,对nodes进行属性设置会导致dom也有了属性设置的结果。回想了一下,在javascript中,对象是引用,而不是赋值,而dom不是zepto对象就是Dom对象,假如是zepto对象的话,那么nodes其实就是dom,因为在zepto的init方法中,传入参数是zepto对象的话则直接返回该对象。而如果是其他对象的话,则将其设置为数组的第一个元素返回该数组。
菜的黑人牙膏
2019/01/21
1.9K0
iframe属性设置
<iframe runat=”server” src=”you page’s url” width=”750″ height=”30″ frameborder=”no” border=”0″ marginwidth=”0″ marginheight=”0″ scrolling=”no” allowtransparency=”yes”></iframe>
全栈程序员站长
2022/07/22
3.1K0
接口vs抽象类的区别?如何用普通的类模拟抽象类和接口?
在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。比如,我们可以使用接口来实现面向对象的抽象特性、多态特性和基于接口而非实现的设计原则,使用抽象类来实现面向对象的继承特性和模板设计模式等等。
码农架构
2021/01/19
1.2K0
前端学习笔记之CSS属性设置 CSS属性设置
一 字体属性 1、font-weight:文字粗细 取值 描述 normal 默认值,标准粗细 bord 粗体 border 更粗 lighter 更细 100~900 设置具体粗细,400等同于normal,而700等同于bold inherit 继承父元素字体的粗细值 2、font-style:文字风格 normal 正常,默认就是正常的 italic 倾斜  3、font-size:文字大小 fs:一般是12px或13px或14px 注意: 1、通过font-size设置文字大小一定要带单位
Jetpropelledsnake21
2019/02/15
5.9K0
如何为机器学习设置Python环境
为Python设置机器学习环境可能是一项棘手的任务。如果你之前从未设置过类似的东西,那么可能需要花费数小时来处理不同的命令。
AiTechYun
2019/08/15
7510
如何为Python 3设置Jupyter Notebook
Jupyter Notebook为交互式计算提供了一个命令shell作为Web应用程序。该工具可以与多种语言一起使用,包括Python,Julia,R,Haskell和Ruby。它通常用于处理数据,统计建模和机器学习。
穿鞋跑得快
2018/10/19
2.8K0
Python - 面向对象(三)公共变量,受保护变量,私有变量
在Python的类里面,所有属性和方法默认都是公共的;但Python也可以设置受保护、私有类型的变量or方法
小菠萝测试笔记
2020/06/09
1.6K0
CA1047:不要在密封类型中声明受保护的成员
公共类型是 sealed(在 Visual basic 中为 NotInheritable),并声明了一个受保护的成员或受保护的嵌套类型。 此规则不报告 Finalize 方法的冲突,这些方法必须遵循此模式。
呆呆
2022/01/10
6350
点击加载更多

相似问题

在抽象类中模拟受保护的方法

34

模拟基类受保护的属性

10

如何模拟从抽象类继承的受保护方法

47

区分属性受保护和设置者受保护

25

如何模拟从抽象类继承的受保护子类方法?

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文