有没有一种方法可以防止在react admin中编辑表单时服务器400出错后重置表单状态



我有一个Edit组件,它包含一个已设置为pessimistic模式的TabbedForm。我还使用了一个基于react admin的简单rest提供程序的自定义数据提供程序。

<Edit
title="Edit entity"
mutationMode="pessimistic"
{...props}
>
<TabbedForm>
<FormTab label="Details">
<TextInput source="name" />
</FormTab>
</TabbedForm>
</Edit>

API中有一个验证规则,可确保不存在具有相同名称的另一个实体。

当此验证失败时,服务器会返回一条400错误消息。我已经将其设置为在吐司中显示此错误,并且运行良好。

我遇到的问题是,当出现400错误响应时,整个表单状态会被重置,因此用户在表单上取得的所有进展都会丢失。例如,如果name字段的原始值是"0";实体A";,并且我将其改为";实体B";并且提交表单时,API发现已经存在具有该名称的实体,返回错误,然后将name字段重置回"0";实体A";。如果此表单上还有其他字段,它们也都会重置回原始状态。

在400响应返回后,似乎有另一个HTTP请求被发送到API,以再次通过ID获取实体(即,再次调用数据提供程序上的getOne方法(。

有没有一种方法可以防止在服务器发出400响应后重置表单状态?

我认为一个替代的解决方案是通过使用客户端验证来防止400个错误再次出现——也许是通过添加一个自定义验证程序来执行API请求,以检查是否存在具有该名称的实体。

我找到了一种方法,通过重写onFailure行为来防止表单在提交失败后被刷新。

const onFailure = (error: any) => {
notify(
typeof error === "string"
? error
: error.message || "ra.notification.http_error",
{ type: "warning" }
);
};

我只将逻辑发送到refresh()页面,如react管理文档中所述。

参考:https://marmelab.com/react-admin/CreateEdit.html#onfailure

相关内容

  • 没有找到相关文章

最新更新