Reactjs commitMutation防止setState在handleSubmit中重新呈现组件
我正在尝试在Relay中实现一个表单,当您单击submit按钮时,文本将替换为加载图标 处理提交功能: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,
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中调用)是有效的。我不知道为什么它以前不起作用。最好的解释是:)