Reactjs commitMutation防止setState在handleSubmit中重新呈现组件

Reactjs commitMutation防止setState在handleSubmit中重新呈现组件,reactjs,relayjs,relay,Reactjs,Relayjs,Relay,我正在尝试在Relay中实现一个表单,当您单击submit按钮时,文本将替换为加载图标 处理提交功能: const handleSubmitNewDetails = (e) => { e.preventDefault(); setIsDetailsInFlight(true); // Show loading icon commitUpdateDetails( { name: name, email: email, dob: dob,

我正在尝试在Relay中实现一个表单,当您单击submit按钮时,文本将替换为加载图标

处理提交功能:

const handleSubmitNewDetails = (e) => {
  e.preventDefault();
  setIsDetailsInFlight(true); // Show loading icon
  commitUpdateDetails(
    {
      name: name,
      email: email,
      dob: dob,
  },
  () => { setIsDetailsInFlight(false) }, // on completed
  () => { setIsDetailsInFlight(false) }, // on error
);
})

我的handleSubmit函数应该将突变的“飞行中”状态设置为true。当commitUpdateDetails不存在时,这将导致重新加载,从而成功呈现加载图标。如果存在commitupdateDetails,则此操作无效

commitUpdateDetails可以工作,我在响应时间中添加了一个人工延迟来测试加载图标,所以延迟不是问题

我猜继电器或react不会完成允许重新加载的状态设置,除非句柄函数完成,即使在等待异步函数时也是如此?如果是这样的话,有没有办法绕过这个问题

更新:

在回调中不使用setState钩子会导致加载图标出现,所以我猜react/relay正在处理这个问题,但不确定如何制定解决方案

更新2:

使用setTimeout而不是commitMutation设置一个简单的处理程序非常有效,因此我不明白为什么在等待变异完成时不进行渲染。

在promise中包装commitMutation(在commitUpdateDetails中调用)是有效的。我不知道为什么它以前不起作用。最好的解释是:)