在 React Final Form 提交上调用 API

Posted

技术标签:

【中文标题】在 React Final Form 提交上调用 API【英文标题】:Calling an API on React Final Form submission 【发布时间】:2021-04-26 04:53:50 【问题描述】:

我正在使用 React Final Form,并希望在单击表单上的提交时调用 API。

我正在尝试遵循“Async Redux 提交”example 并卡住了。我正在使用来自react-redux-promise-listener 的MakeAsyncFunction,并且可以看到start 中定义的Action 正在被调度,但很难理解应该使用什么来处理它 - 即调用我想要的这个API使用。

下面的简化表单代码:

<MakeAsyncFunction
  listener=promiseListener
  start='FORM_SUBMIT'
  resolve='FORM_COMPLETE'>
  submit_form => 
      return (
          <Form onSubmit=submit_form
              render=( submitting, handleSubmit ) => (
                  <form onSubmit=handleSubmit>
                      <Paper>
                          <Grid container>
                              <<fields>>
                          </Grid>
                          <Grid>
                              <Button type="submit"
                                      disabled=submitting>
                                  Submit
                              </Button>
                          </Grid>
                      </Paper>
                  </form>
              ) />
      );
  
  </MakeAsyncFunction>

我有一个可以执行此操作的 Reducer,但我知道在 Reducer 中执行诸如外部调用之类的操作是不好的做法,因此我正在避免这种情况。

我应该怎么做来处理这个分派的动作?

我正在使用 Redux-Thunk 中间件进行 API 调用,这些调用是使用 Action Creator 定义的。这些在我的应用程序的其他地方都很好,但它把它们连接到我完全坚持的表单提交。

我看到here 提出了类似的问题,但无法理解答案(即使它是由图书馆的作者提出的!),所以我希望有人能够进一步帮助我。 我对 React 和 Web 开发很陌生(C#.NET API 和数据库更多是我的领域),因此非常感谢任何建议。谢谢!

Here is a simplified example on CodeSandbox

【问题讨论】:

如果你能分享一些代码会很好。 我已经添加了我的 MakeAsyncFunction 和 Form 代码 是的,一个 CodeSandbox 值一千字。 @ErikR。我已将 CodeSandbox 链接添加到应用程序的简化示例。希望没关系,我以前从未使用过,对不起! 【参考方案1】:

createStore 中交换中间件的顺序似乎已经解决了?

composeEnhancers(applyMiddleware(thunk, reduxPromiseListener.middleware))

而不是

composeEnhancers(applyMiddleware(reduxPromiseListener.middleware, thunk))

不要问我为什么。我已经 3 年没有研究过这些库了。

【讨论】:

对不起,我不确定你的意思 - 我需要一些东西来监听表单提交中发送的操作,交换中间件的顺序不这样做吗?除了交换它们之外,我还需要添加其他东西吗? 正如我所说,我不确定为什么交换订单有效。它不适合你? 我认为可能存在一些混淆 - 当我离开它时,代码沙箱运行良好。我今天回去了,它没有加载,一定是有人改变了它。我现在已经让它运行起来了。但是我仍然很困惑,我不确定您所说的“工作”是什么意思,更改中间件的顺序并不能帮助我听取和处理表​​单提交号的动作。这就是我要真正解决的问题。

以上是关于在 React Final Form 提交上调用 API的主要内容,如果未能解决你的问题,请参考以下文章

如何实现 useDropzone 钩子而不是 <Dropzone /> (组件)与 react-final-form

【React】antd的form表单的自定义校验规则的用法

在 react-hook-form 的 useFieldArray 上异步调用 reset 时,reset 无法正常工作

react多组表单同事提交怎么分组

React JS 多个提交按钮 react-hook-form

如何使用 react-hook-form 有条件地禁用提交按钮?