这是我的自定义数据提供程序的getList函数
getList: (resource, params) => {
console.log('DataProvider.GetList ');
console.log(resource);
console.log(params);
const { page, perPage } = params.pagination;
const { field, order } = params.sort;
const query = {
...fetchUtils.flattenObject(params.filter),
_sort: field,
_order: order,
_start: (page - 1) * perPage,
_end: page * perPage,
};
const url = `${getUrl(resource)}?${stringify(query)}`;
const paging = supportsPaging(resource);
return httpClient(url).then(
({ headers, json }) => {
var result = [];
// Implementierung von clientseitigem Paging & Filtering
var filtered = applyFilter(json, params.filter);
if (!paging) {
filtered=applyPagination(filtered, page, perPage);
}
else {
result = filtered;
}
return {
data: result,
total: json.length, // Erfordert nun keinen speziellen Header mehr, CSE-Connect kompatibel
};
}, ({ reason }) => {
console.log(reason);
}).catch((e)=>{
console.log(e);
});
}
在编辑表单中,我需要显示来自其他资源的相关记录。该关系有点怪异,需要字符串解析,所以我不能只使用内置的ReferenceField
。这就是为什么我试图像这样直接调用dataProvider的getList
函数:
const GetJobData = (params) => {
let parms = { "pagination": { "page": 0, "perPage": 25 }, "sort": { "field": "id", "order": "ASC" }, "filter": {} };
const { data, loading, error } = useGetList('jobs', parms);
if (loading) { return <LinearProgress />; }
if (error) { return <p>ERROR</p>; }
return <p>{data}</p>;
};
这只是一个测试。由于调用会导致错误,因此尚未正确显示结果数据:
错误:dataProvider抛出错误。它应该返回被拒绝承诺吧。
我阅读了很多有关查询API的文档(https://marmelab.com/react-admin/Actions.html#specialized-hooks),但摆弄很多,但由于对Promise的了解有限,所以我失败了。
有简单的解决方法吗?
如果发生错误,您的dataProvider应该返回以下值:
import { HttpError } from 'react-admin'
...
return Promise.reject(new HttpError(message, status, body))