javascript - Formik resetForm() 在有自定义组件时不会重置整个表单
问题描述
我正在使用 Formik - 和 formik-material-ui - 来处理我的表单。在其中一种形式中,我包含了一个 CustomFileUpload 组件:
import React from "react";
import {
Input,
FormControl,
} from "@material-ui/core";
const CustomFileUpload = (props) => (
<FormControl>
<Input
inputProps={{
type: "file",
disabled: props.disabled || props.form.isSubmitting,
name: props.field.name,
onChange: (event) => {
const file = event.currentTarget.files[0];
props.form.setFieldValue(props.field.name, file);
},
}}
/>
</FormControl>
);
export default CustomFileUpload;
尽管我的表单读取了它的值,并且可以通过以下 testSubmit 函数访问,但我的 CustomFileUpload 组件字段处理的字段是唯一在调用该函数时没有被重置的字段resetForm
:
const testSubmit = (values, { resetForm }) => {
console.log(values);
resetForm();
};
如果它可能有用,当删除所有“工作字段”时,这就是我的 Formik 组件的样子:
<Formik
initialValues={{
cover: cover
}}
onSubmit={(values, { setSubmitting, resetForm }) => {
testSubmit(values, { resetForm });
}}
>
{({ submitForm, isSubmitting }) => (
<div className="flex">
<Form>
<Field
component={CustomFileUpload}
label="Cover image"
name="cover"
/>
<Button
onClick={submitForm}
>
Submit
</Button>
</Form>
</div>
)}
</Formik>
有人知道为什么cover
值可以通过console.log(values)
但不能被重置resetForm()
吗?
解决方案
我已经面临这个问题。您是否尝试传递值以精确输入。
{({ submitForm, isSubmitting, values }) => (
<div className="flex">
<Form>
<Field
component={CustomFileUpload}
label="Cover image"
name="cover"
value = { values.cover || "" } <-- insert this
/>
推荐阅读
- javascript - 未定义与 Apollo 反应的返回过程
- c# - 随机多个图像wpf c#
- python - 如何在 python 中设置最小最大限制并创建存储桶?
- docusignapi - DocuSign API 集成问题
- android - 将数据从一个回调传递到另一个回调的机制
- python - tkinter 和线程参数
- javascript - 使用 getElementsByTagName 查找变量中的所有 href
- javascript - npm install 在我的网络上挂起,但在其他网络上有效
- java - Android:添加 sdk 后的 build.gradle 问题
- angularjs - 在 Cordova 应用程序中将 AngularJS 升级到 Angular 6