我正在使用React Admin和Reqres作为我的REST api。
我正在努力执行create动作。
问题是API不维护创建的新元素,因此当我执行POST操作时,api响应将带有新记录,例如:
{
"first_name":"John",
"last_name":"Doe",
"email":"[email protected]",
"id":"115",
"createdAt":"2019-11-26T21:36:40.165Z"
}
但是在此之后,默认情况下,React Admin重定向到编辑页面,向我显示新数据,然后使用响应的ID进行getOne
调用,但是由于API没有保存我的新元素,所以我得到了404当React Admin将GET
设置为https://reqres.in/api/users/115
时。
我想问的是是否可以存储和获取该临时数据,并且不进行getOne
调用以避免该错误?另外,我如何列出新用户?因为当React管理员调用getList
时,该新元素将不在该列表中。
我有数据提供者的基本知识:
create: (resource, params) => httpClient(`${apiUrl}/${resource}`, {
method: 'POST',
body: JSON.stringify(params.data),
}).then(({ json }) => ({
data: { ...params.data, id: json.id },
})),
getOne: (resource, params) => httpClient(`${apiUrl}/${resource}/${params.id}`).then(({ json }) => ({
data: json.data,
})),
谢谢。
我不确定我是否理解:您的API对POST的答复为OK,但是对相同资源标识符的后续GET调用不会返回记录?如果是这种情况,则您的API不是RESTful的,并且react-admin可能不适合您的用例。
我看到2种可能的解决方法:
Create
组件中,添加redirect="list"
属性以重定向到列表而不是详细视图。这样,即使新记录将很快出现(乐观渲染)然后消失(一旦GET请求的响应到达而没有新记录),界面也不会中断。您还可以通过设置undoable=false
禁用乐观渲染,这样可以消除闪烁dataProvider.create()
(或react-admin 2.x中的CREATE
)中,请不要在API响应到达后立即返回。相反,每隔x秒对服务器执行一次ping操作,以查看该帖子是否最终对GET请求可见,只有这样,您的dataProvider Promise才应返回