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

formik access initialValues in onSubmit handler for comparison with values

我有一个使用 Formik 的编辑表单。如果图片字符串已更改,我需要上传新图片。我需要比较图片字段的initialValues和图片字段的values来判断是否调用fileUpload函数上传图片和return 字符串 uri

我如何访问我的 onSubmit 处理程序中的 initialValues 以进行此比较。我一直在网上搜索并找到关于这个主题的article,但是,作者正在使用 redux 和 recompose。就我而言,我使用的是 graphql 并且没有使用任何状态管理库

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

formProps 有 initialValues 和 values。 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>

Is it possible to still do such a comparison without a state management library? n how can i access initialValues inside my onSubmit handler?

不直接 - 现成组件 (<Formik/>) 的简单性总是有缺点。

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

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

您可以使用简单的 class 组件及其状态(或道具)作为 initialValues 传递下去。在同一组件中定义的提交处理程序(也作为 prop 传递)将可以访问 this.state 中的 data/object。当然,您可以在功能组件中使用钩子 - useState

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