没有在 React-admin 的 redux-saga 中获取已创建记录的 ID(未定义)

Not getting ID (it's undefined) of created record in redux-saga in React-admin

这就是问题所在。 我想捕获新创建记录的 ID,所以我创建了自定义观察者传奇,它监听每个 "RA/CRUD_CREATE_SUCCESS"。我的 worker saga 需要获取新创建记录的 ID,以便我可以使用该 ID 和其他一些数据对其他端点进行第二次调用。

但出于某种原因,每次创建记录时,watcher saga 确实有效,但该记录的 ID 在负载中未定义。除了ID,其他的都在。

我正在使用简单的表格,并按照他们在文档中解释的那样创建记录。 我正在使用 react-admin 版本。 2.9.7

欢迎提出任何建议、想法和修复。

根据消息来源,都在 2.9.7 上,

https://github.com/marmelab/react-admin/blob/v2.9.7/packages/ra-core/src/actions/dataActions/crudCreate.ts#L86

https://github.com/marmelab/react-admin/blob/v2.9.7/packages/ra-core/src/types.ts#L7

ID 应该在 action.payload.id 上。因为它不是,要么是一个 react-admin 错误,你可以尝试更改版本来修复,要么你的 dataProvider 没有返回创建资源的 id,但是这样,react-admin 可能会抱怨并且你已经注意到了错误,创建后,如果 redirect="edit",您将被重定向到 /resource/undefined。发生这种情况?

如果这是一个 ra 错误,你可以尝试从 action.meta.redirectTo 中提取 id,如果它存在,或者根本不使用 sagas,拦截 dataProvider 请求,并且每次 CREATE 请求成功时,做你的第二个致电:

import { CREATE } from 'react-admin'

const interceptorDataProvider = dataProvider = async (verb, resource, params) => {
     if (verb === CREATE) {

         let response

         try {
             response = await dataProvider(verb, resource, params)
         } catch (e) {
             return Promise.reject(e)//ra expects rejecteds promises
         }

         //do your second call with response.data.id
         return response             

     }

    return dataProvider(verb, resource, params)
}