当前位置: 首页 > 知识库问答 >
问题:

我正在尝试使用Yup进行条件表单验证,但无法更改值“showfile”的值

司徒钱青
2023-03-14

我使用formik和Yup来处理响应中的表单数据和表单验证。我试图将"Showfile"的值更改为true以进行条件验证,但值不会更改。

                             

                                    
                                    TextField
                                    label="Resume"
                                    star="*"
                                    color="red"
                                    name="file"
                                    type="file"
                                    accept=".pdf ,.docx,.doc "
                                    onChange={(event) =>
                                        formik.setFieldValue(
                                            "file",
                                            event.currentTarget.files[0],
                                            "showfile",
                                            true
                                        )
                                    }
                                    value={formik.value}
                                />
                                
file: Yup.mixed().when("showfile", {
            is: true,
            then: Yup.mixed()
                .required("Required")
                .test(
                    "FILE_SIZE",
                    "Uploaded file is too big.",
                    (value) => value && value.size  value && SUPPORTED_FORMATS.includes(value.type)
                ),
Formik
            initialValues={{
                UserName: "",
                email: "",
                Phone: "",
                message: "",
                file: "",
                showfile: false,
                submit: false,
            }}
            validationSchema={validate}
            onSubmit={(values, actions) => {
                setTimeout(() => {
                    console.log(values);
                    actions.setSubmitting(false);
                }, 1000);
            }}
        >

共有1个答案

子车轶
2023-03-14

您使用的setFieldValue方法错误。它只更新一个字段。如果您想要设置2字段,则需要调用setFieldValue2次:

onChange={(event) => {
    formik.setFieldValue("file", event.currentTarget.files[0]);
    formik.setFieldValue("showfile", true);
}}

您可以在这里阅读更多关于setFieldValue的信息:https://formik.org/docs/api/formik#setfieldvalue-field-string-value-any-shouldvalidate-boolean--void

 类似资料:
  • 如果您不得不跟浏览器提交的表单数据打交道,视图函数里的代码将会很快变得 难以阅读。有不少的代码库被开发用来简化这个过程的操作。其中一个就是 WTForms , 这也是我们今天主要讨论的。如果您发现您自己陷入处理很多表单的境地,那您也许 应该尝试一下他。 要使用 WTForms ,您需要先将您的表单定义为类。我建议您将应用分割为多个模块 (大型应用) ,这样的话您仅需为表单添加一个独立的模块。 挖掘

  • 问题内容: 到目前为止,我已经使用纯JavaScript来验证表单,但是我需要在组合中添加mysqli查询。只有我对jquery和ajax不太了解。我可以做一个简单的登录表格,但这有点复杂。谁能给我有关如何添加jquery / ajax组件来验证这一点的任何指示: 问题答案: 您可以做的是发送$ .post像这样: 在你的 记得: 如果您要发布表单,请提交以添加到您的javascript函数中以手

  • 问题内容: 这是我的代码: 我似乎从未得到HTTP_NOT_MODIFIED响应代码,甚至连连几次击中同一台服务器-页面绝对没有变化。另外,conn.getHeaderField(“ ETag”)似乎总是响应null,有时conn.getHeaderFieldDate(“ Last- Modified”,0)返回0。我已经在各种Web服务器上进行了尝试。 谁能告诉我我在做什么错? 问题答案: 你们

  • 问题内容: 我正在使用Angular进行表单验证。 这是我用的-plunker- edit 我从Angularjs文档中获取了此代码- 绑定到窗体和控件状态使用了type,但是当我运行它并输入它时说它是有效的。我该如何解决 ? PS:我是AngularJs的初学者 编辑: 同样以下输入也显示有效 aaa @ aaa aaa---aaa@gmail.com aaa`aaa @ aaa 预期的有效电子

  • 本文向大家介绍AngularJS使用angular-formly进行表单验证,包括了AngularJS使用angular-formly进行表单验证的使用技巧和注意事项,需要的朋友参考一下 当验证表单中有很多字段时,这时候可能希望把html的生成以及验证逻辑放到controller中,在页面,也许是这样的: 然后,在controller中定义各个字段以及验证。angular-formly就是为这个需