如何在 React 中使用 Formik 的自定义输入?

新手上路,请多包涵

我正在尝试在 Formik 中使用 DatePicker 。但是当我单击 DatePicker 的日期时,它的表单值不会改变。相反,我收到了这个错误:

未捕获的类型错误:e.persist 不是 Formik._this.handleChange 的函数(formik.es6.js:5960)

我缩短代码,代码如下

const SomeComponent = () => (
    <Formik
        render={({
            values,
            handleSubmit,
            handleChange,
            setFieldValue
        }) => {
            return (
                <div>
                    <form onSubmit={handleSubmit}>
                        <DatePicker
                            name={'joinedAt'}
                            value={values['joinedAt']}
                            onChange={handleChange}
                        />
                    </form>
                </div>
            )
        }}
    />
)

我用谷歌搜索了一些文件, https://github.com/jaredpalmer/formik/issues/187https://github.com/jaredpalmer/formik/issues/86

所以我尝试了下面的方法,但它不起作用。

  ...setFieldValue

 <DatePicker
   name={'joinedAt'}
   value={values['joinedAt']}
   onChange={setFieldValue}
 />

原文由 ton1 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 648
2 个回答

我像这样解决这个问题

<DatePicker
   name={'joinedAt'}
   value={values['joinedAt']}
   onChange={e => setFieldValue('joinedAt', e)}
/>

2020-03-08 更新:

您可以在 setFieldValue 的第二个道具上使用 e.target.value ,这取决于您的自定义输入设计。感谢布兰登。

原文由 ton1 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果你有更深的嵌套,你应该使用 Formik Field 。例子:


<Formik
    validationSchema={schema}
    initialValues={initialValues}
    onSubmit={(values, actions) => {}}
>

  <Field name="colors" component={ColorsEditor}  colors={colorArray}/>
</Formik>

const ColorsEditor = ({ field, colors, form, ...props }) => {

    return (
        <div>
            <Button onClick={() => form.setFieldValue('colors', "myValue")}>
            </Button>
        </div>
    )
}

所以 Field 组件已经包含表单,其中包含您可以在需要的地方使用的 setFieldValue。它还包括用于其他自定义的错误和所需字段。

原文由 Hugo Gresse 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题