formik访问onSubmit处理程序中的initialValues以与值进行比较

时间:2019-05-06 06:19:32

标签: reactjs graphql formik

我有一个使用Formik的编辑表单。如果图片字符串已更改,我需要上传新图像。我需要比较图片字段的 initialValues 与图片字段的 values ,以确定是否调用fileUpload函数上传图片并返回字符串uri

如何进行onSubmit处理程序中的initialValues进行比较。我一直在网上搜索,发现关于这个主题的article,但是,作者正在使用redux并重新编写。就我而言,我使用的是graphql,没有使用任何状态管理库

在没有状态管理库的情况下是否仍然可以进行这种比较? n如何在onSubmit处理程序中访问initialValues?

formProps同时具有initialValues和值。 SubmitProps仅具有值,但没有initialValues,如果用户更改了字段

,我需要进行比较
<Formik
  initialValues={{
    ...getMusicById,
  }}
  onSubmit={(values, bag, ...submitProps) => {
    console.log("@onSubmit ", values, bag, submitProps);
    const {
      session: { me }
    } = this.props;
    this._handleSubmit(values, bag, me);
  }}
  validationSchema={formValidateSchema}
  render={({ isValid, isSubmitting, ...formProps }) => {
    console.log("@formProps ", formProps);
    return (
      <React.Fragment>
        <Form>

1 个答案:

答案 0 :(得分:1)

  

在没有状态管理库的情况下是否仍然可以进行这种比较? n如何在onSubmit处理程序中访问initialValues?

不直接-易于使用的组件(<Formik/>)总是有缺点。

您可以使用任何状态管理方法,并将initialValues的值作为prop传递。

在文章<Formik/>中嵌入了经过HOC增强的<FooForm/>中。值存储在redux中,并作为props传递到<Formik />

您可以使用简单的类组件,并将其状态(或道具)作为initialValues传递下来。在同一组件中定义的提交处理程序(也作为prop传递)将有权访问this.state中的数据/对象。当然,您可以在功能组件中为此使用钩子-useState

您可以使用withFormik HOC-props.initialValues应该可用。