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

问题描述 投票:0回答:1

这是问题。我想捕获新创建记录的ID,所以我创建了自定义观察器传奇,以监听每个“ RA / CRUD_CREATE_SUCCESS”。而且我的工作人员传奇需要获取新创建记录的ID,以便我可以使用该ID以及其他一些数据对其他端点进行第二次调用。

但是出于某种原因,每次创建记录时,watcher saga确实可以工作,但是该记录的ID在有效负载中未定义。除了ID外,其他所有内容都在那里。

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

欢迎任何建议,想法,修复。

reactjs redux-saga react-admin
1个回答
0
投票

根据来源,都在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 bug,您可以尝试从action.meta.redirectTo中提取ID,如果存在,或者根本不使用sagas,则拦截dataProvider请求,并且每次CREATE请求成功时,都进行第二次调用:] >

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)
         }

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

     }

    return dataProvider(verb, resource, params)
}
© www.soinside.com 2019 - 2024. All rights reserved.