Reactjs SetValues Formik函数禁用Formik HandleSubmit

Reactjs SetValues Formik函数禁用Formik HandleSubmit,reactjs,forms,formik,Reactjs,Forms,Formik,我有一个表格,可以处理提交的两种不同的方式。差异由值形式的标志管理,该标志可以是true或false 我遇到了一个非常奇怪的问题,当我使用Formik setValues()函数时,表单根本没有进入handleSubmit函数。它只是停止执行。但是,如果我仅通过以下方式设置值:this.props.values.x=。。。 它进入函数并继续提交表单 为什么会这样 显示代码实际上毫无意义,因为描述告诉了您一切,但提交处理程序是这样的: 确认函数调用submit处理程序,该处理程序设置值,然后尝试调

我有一个表格,可以处理提交的两种不同的方式。差异由值形式的标志管理,该标志可以是true或false

我遇到了一个非常奇怪的问题,当我使用Formik setValues()函数时,表单根本没有进入handleSubmit函数。它只是停止执行。但是,如果我仅通过以下方式设置值:this.props.values.x=。。。 它进入函数并继续提交表单

为什么会这样

显示代码实际上毫无意义,因为描述告诉了您一切,但提交处理程序是这样的:

确认函数调用submit处理程序,该处理程序设置值,然后尝试调用handleSubmit

        <Confirmation
          items={this.confirmationData()}
          isLoading={this.props.isSubmitting}
          open={isConfirming}
          preapproval={true}
          submitAnother={this.submitAnother}
          onClick={this.submit} //this is the submit handler
          onClose={() => this.setState({ isConfirming: false })}
        />

  submit = () => {
    this.props.setValues({ ...this.props.values, submit: true})
    this.props.handleSubmit()
  }
this.setState({isConfirming:false})
/>
提交=()=>{
this.props.setValues({…this.props.values,submit:true})
this.props.handleSubmit()
}

如果第一行更改为this.props.values.submit=true,则表单将使用setValues函数进行提交,将提交值设置为true后,应用程序停止执行。

结果表明,问题在于调用setFieldValue时,正在验证标志设置为true,因此最简单的解决方案是将第三个参数传递给setFieldValue以手动关闭验证:

  submit = () => {
    this.props.setFieldValue('submit', true, false)
    this.props.handleSubmit()
  }