微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在反应管理中扩展数据提供者?

如何解决如何在反应管理中扩展数据提供者?

我正在使用 react admin。我从他们的 example implementation 创建了一个 DataProvider

但是,我不得不将他们的登录表单从 username 更改为 email。这意味着现在我应该提供一个自定义Auth Provider

现在在我的 authProvider.js 中,我想连接到 API。根据他们的建议,最好为与 API 的任何通信扩展 DataProvider

由于 login 不是 dataProvider 中的任何现有方法,因此我需要向其添加方法

我为通用 API 调用添加了两个方法

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 |         })

我应该从我的自定义方法返回什么?如何将它们连接在一起?

更新 我知道我可以将 Promiseresolvereject 方法一起使用。但我想尽可能多地使用 react-admin 的内部管道和逻辑。例如,我不想在我的 get 中的自定义 postdataProvider.js 方法中实现 HTTP 状态检查。他们的 fetch.js 文件中有这个逻辑,我希望能够使用它。

解决方法

对于与身份验证相关的请求,您不必使用 dataProvider。使用 fetch 或任何你想要的库(axios 或任何其他)。有关信息,我们为客户开发的 authProvider 都没有使用 dataProvider。他们有两个截然不同的工作

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。