React Admin 3 为 dataProviders 使用了一个新接口,所有答案似乎都只适用于 React Admin 2。
以下是我为在 React Admin 3 上运行所做的工作:
class CompositeDataProvider {
constructor(dataProviders) {
this.dataProviders = dataProviders;
}
_delegate(name, resource, params) {
const { dataProvider } = this.dataProviders.find((dp) =>
dp.resources.includes(resource)
);
return dataProvider[name](resource, params);
}
getList(resource, params) {
return this._delegate("getList", resource, params);
}
getOne(resource, params) {
return this._delegate("getOne", resource, params);
}
getMany(resource, params) {
return this._delegate("getMany", resource, params);
}
getManyReference(resource, params) {
return this._delegate("getManyReference", resource, params);
}
create(resource, params) {
return this._delegate("create", resource, params);
}
update(resource, params) {
return this._delegate("update", resource, params);
}
updateMany(resource, params) {
return this._delegate("updateMany", resource, params);
}
delete(resource, params) {
return this._delegate("delete", resource, params);
}
deleteMany(resource, params) {
return this._delegate("deleteMany", resource, params);
}
}
export default CompositeDataProvider;
然后,您可以通过以下方式使用它:
const dataProvider = new compositeDataProvider([
{
dataProvider: jsonServerProvider("https://jsonplaceholder.typicode.com"),
resources: ["posts", "users"],
},
{
dataProvider: simpleRestProvider("http://path.to.bar.api"),
resources: ["bars"],
},
]);
它仍然是准系统,但它为您提供了一个可以改进的想法。