我正在从休息管理员迁移到反应管理员
使用完全相同的Edit / SimpleForm / ReferenceInput组合,静态管理(似乎使用GET_ONE)和react-admin(似乎使用GET_MANY)之间的行为是不同的
问题是我的后端API不支持GET_MANY
这是否意味着我必须修改数据提供程序以某种方式将GET_MANY转换为多个GET_ONE调用?
如果是这样,您能否提供一个基本的示例来做到这一点。
请注意,这可能是https://marmelab.com/react-admin/Inputs.html#referenceinput文档的一部分,因为我认为这并不罕见
答案 0 :(得分:0)
等待一个明确的答案,这是我在基于https://marmelab.com/react-admin/DataProviders.html#example-request-processing的数据提供者中所做的事情:
const convertRESTRequestToHTTP = (type, resource, params) => new Promise((resolve, reject) => {
let url = '';
const options = {};
switch (type) {
/* see other cases in the doc */
case GET_MANY: {
//our API does not support GET_MANY
//=> we fallback to GET_ONE if there is a single id,
// otherwise we throw an error
// also see convertHTTPResponseToREST to transform the JSON
if (params.ids.length === 1) {
url = `${apiUrl}/${resource}/${params.ids[0]}`;
break;
}
throw new Error('the API does not support GET_MANY')
}
}
resolve({ url, options });
});
const convertHTTPResponseToREST = (response, type, resource, params) => {
const { json } = response;
switch (type) {
/* see other cases in the doc */
case GET_MANY:
//see explanantion in convertRESTRequestToHTTP
if (params.ids.length !== 1) {
throw new Error('the API does not support GET_MANY')
}
return { data: [json] };
}
};