我正在尝试在Relay中实现一个表单,当您单击提交按钮时,文本将被加载图标替换。
处理提交功能:
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有效,我添加了一个人为的响应时间延迟来测试加载图标,所以延迟不是问题。
我猜,除非句柄函数完成,否则relay或react不会完成允许重新转发器的状态设置,即使在等待异步函数时也是如此?如果是的话,有没有办法绕过这个。。。?
更新:
在回调中不使用setState挂钩会导致加载图标出现,所以我想react/rerelay正在处理这个问题,不知道如何制定解决方案。
更新2:
使用setTimeout而不是commitMutation设置一个简单的处理程序效果很好,所以我不明白为什么在等待突变完成时不会发生渲染。
在promise中封装commitMutation(在commitUpdateDetails中调用(是有效的。我不知道为什么它以前不起作用。一个很好的解释:(