React Admin:在 Redux Saga 中使用 DataProvider
React Admin: useDataProvider inside a Redux Saga
我有自定义的反应管理页面,经常查询多个资源(同一页面的帐户、帖子、评论)。
我正在使用 redux sagas 来处理 API 请求作为副作用,同时将我的视图组件与此逻辑分离。
从 react-admin 3.0 开始,为了正确使用 dataProvider
和所有 react-admin 的错误处理和通知,我应该使用 useDataProvider
钩子,但是 - 钩子不能在 sagas 中使用,那么我应该如何编排来自 saga 的多个请求?
或者有没有其他的做法,同时保持我说的要求?
谢谢!
React-admin 3.0 不再强调 sagas,您可以使用返回 useDataProvier 挂钩的 Promise 简单地链接数据提供程序调用,如 react-admin 文档 (https://marmelab.com/react-admin/Actions.html) 中所述:
import React from 'react';
import { useDataProvider, useNotify, useRedirect, Button } from 'react-admin';
const ApproveButton = ({ record }) => {
const notify = useNotify();
const redirect = useRedirect();
const dataProvider = useDataProvider();
const approve = () => dataProvider
.update('comments', { id: record.id, data: { isApproved: true } })
.then(response => {
// call the data provider again here
data.provider.getMany('...')
})
.catch(error => {
// failure side effects go here
notify(`Comment approval error: ${error.message}`, 'warning');
});
return <Button label="Approve" onClick={approve} />;
};
react-admin 演示示例展示了如何获取多个资源来填充复杂页面(仪表板),它应该对您的用例有很好的启发:
https://github.com/marmelab/react-admin/blob/master/examples/demo/src/dashboard/Dashboard.tsx
我有自定义的反应管理页面,经常查询多个资源(同一页面的帐户、帖子、评论)。
我正在使用 redux sagas 来处理 API 请求作为副作用,同时将我的视图组件与此逻辑分离。
从 react-admin 3.0 开始,为了正确使用 dataProvider
和所有 react-admin 的错误处理和通知,我应该使用 useDataProvider
钩子,但是 - 钩子不能在 sagas 中使用,那么我应该如何编排来自 saga 的多个请求?
或者有没有其他的做法,同时保持我说的要求?
谢谢!
React-admin 3.0 不再强调 sagas,您可以使用返回 useDataProvier 挂钩的 Promise 简单地链接数据提供程序调用,如 react-admin 文档 (https://marmelab.com/react-admin/Actions.html) 中所述:
import React from 'react';
import { useDataProvider, useNotify, useRedirect, Button } from 'react-admin';
const ApproveButton = ({ record }) => {
const notify = useNotify();
const redirect = useRedirect();
const dataProvider = useDataProvider();
const approve = () => dataProvider
.update('comments', { id: record.id, data: { isApproved: true } })
.then(response => {
// call the data provider again here
data.provider.getMany('...')
})
.catch(error => {
// failure side effects go here
notify(`Comment approval error: ${error.message}`, 'warning');
});
return <Button label="Approve" onClick={approve} />;
};
react-admin 演示示例展示了如何获取多个资源来填充复杂页面(仪表板),它应该对您的用例有很好的启发:
https://github.com/marmelab/react-admin/blob/master/examples/demo/src/dashboard/Dashboard.tsx