如何解决如何在反应管理中扩展数据提供者?
我正在使用 react admin。我从他们的 example implementation 创建了一个 DataProvider
。
但是,我不得不将他们的登录表单从 username
更改为 email
。这意味着现在我应该提供一个自定义的 Auth Provider。
现在在我的 authProvider.js
中,我想连接到 API。根据他们的建议,最好为与 API 的任何通信扩展 DataProvider
。
由于 login
不是 dataProvider
中的任何现有方法,因此我需要向其添加方法。
const dataProvider = {
// default methods => getList,create,ect.
get: (url) => {
return httpClient(`${apiUrl}/${url}`,{
method: 'GET'
});
},post: (url,params) => {
return httpClient(`${apiUrl}/${url}`,{
method: 'POST',body: JSON.stringify(params)
});
}
然后在我的 authProvider.js
中使用它:
const authProvider = {
// authentication
login: params => {
dataProvider.post('/login',params).then(result => {
console.log(result);
});
},
现在我被困在如何将它们连接在一起的问题上。当我按登录表单上的 login
按钮时收到此错误:
TypeError: Cannot read property 'then' of undefined
(anonymous function)
node_modules/ra-core/esm/auth/useLogin.js:39
36 | var nextSearch = locationState && locationState.nextSearch;
37 | var login = useCallback(function (params,pathName) {
38 | if (params === void 0) { params = {}; }
> 39 | return authProvider.login(params).then(function (ret) {
| ^ 40 | dispatch(resetNotification());
41 | var redirectUrl = pathName
42 | ? pathName
submit
src/Auth/LoginForm.js:67
64 |
65 | const submit = values => {
66 | setLoading(true);
> 67 | login(values,redirectTo)
| ^ 68 | .then(() => {
69 | setLoading(false);
70 | })
更新
我知道我可以将 Promise
与 resolve
和 reject
方法一起使用。但我想尽可能多地使用 react-admin
的内部管道和逻辑。例如,我不想在我的 get
中的自定义 post
和 dataProvider.js
方法中实现 HTTP 状态检查。他们的 fetch.js
文件中有这个逻辑,我希望能够使用它。
解决方法
对于与身份验证相关的请求,您不必使用 dataProvider。使用 fetch 或任何你想要的库(axios 或任何其他)。有关信息,我们为客户开发的 authProvider 都没有使用 dataProvider。他们有两个截然不同的工作
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。