这就是问题所在。我想捕捉新创建的记录的ID,所以我创建了一个自定义的观察者传奇,它可以监听每个"RA/CRUD_CREATE_SCCESS"。我的工人传奇需要获得新创建的记录的ID,这样我就可以使用该ID和一些其他数据对其他端点进行第二次调用。
但由于某种原因,每次创建记录时,观察者传奇确实有效,但该记录的ID在有效负载中是未定义的。除了ID,其他的都在那里。
我使用的是简单的表单,并像文档中解释的那样创建记录。我正在使用react管理版本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/defined。发生这种事了吗?
如果这是一个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)
}