StarEliteCore / destiny-admin-flow-umi

🐕
25 stars 4 forks source link

🧐[问题]关于useModel的疑问 #15

Closed liujiayii closed 4 years ago

liujiayii commented 4 years ago

1:useModel是不是不支持像之前dva那样可以在页面建个model.js就可以用? 2:loading是不是都要自己处理,感觉比较麻烦,有没有好的方案?

joesdu commented 4 years ago

这个是我的用法,你可以看一下.

import { useCallback, useState } from 'react';

import Cookies from 'js-cookie';
import { Login } from '@/services/auth';

export default function useAuthModel() {
  let temp: Types.AuthDto = {
    accessExpires: 0,
    accessToken: '',
    nickName: '',
    userId: ''
  };
  const [auth, setAuth] = useState(temp);
  const [loading, setLoading] = useState(false);

  const login = useCallback(async ({ account, password }: { account: string; password: string }) => {
    setLoading(true);
    await Login({ userName: account, password })
      .then((response: Types.AjaxResult) => {
        let data: Types.AuthDto = response.data;
        const { accessToken, userId } = data;
        Cookies.set('accessToken', accessToken, { path: '/' });
        Cookies.set('userId', userId, { path: '/' });
        setAuth(data);
        setLoading(false);
      })
      .catch(() => {
        setLoading(false);
      });
  }, []);

  const logout = useCallback(() => {
    // logout implementation
    // setUser(null)
  }, []);

  return { auth, loading, login, logout };
}
joesdu commented 4 years ago

1:useModel是不是不支持像之前dva那样可以在页面建个model.js就可以用? 2:loading是不是都要自己处理,感觉比较麻烦,有没有好的方案?

useModel的名称需要符合规则,比如我这里的useAuthModel通过我这种包装过后用法其实和Dva差不多.

liujiayii commented 4 years ago

emmm看过了

joesdu commented 4 years ago

emmm看过了

若是不习惯的话,还是可以用dva来做.就是dva写起来有点麻烦.

joesdu commented 4 years ago

emmm看过了

loading目前看起来基本上是全部都需要自己处理了.以前dva的话dva有自动处理.

liujiayii commented 4 years ago

我感觉dva比较有优势的就是loading和随便在一个位置建个mode.js都会被umi收集,不一定非要在model文件夹下,,全放在model文件夹下太多会比较乱

joesdu commented 4 years ago

我感觉dva比较有优势的就是loading和随便在一个位置建个mode.js都会被umi收集,不一定非要在model文件夹下,,全放在model文件夹下太多会比较乱

这点确实是,我觉得umi应该实现model文件夹下可以建子文件夹就好了,dva目前主要是使用起来会写大量的声明,稍显麻烦了.相比Hooks,Hooks的局限在于只能用于函数组件.

joesdu commented 4 years ago

1:useModel是不是不支持像之前dva那样可以在页面建个model.js就可以用? 2:loading是不是都要自己处理,感觉比较麻烦,有没有好的方案?

V5 中还自带了 useRequest hooks ,很多页面并不需要数据共享,我们可以用 useRequest 来快速的网络请求,并且内置了 loading 和 run 来指示状态和重新请求数据,使用方式极为简单。

但是useCallback好像还是需要手动处理loading

import { useRequest } from 'umi';

export default () => {
  const { data, error, loading } = useRequest(() => {
    return services.getUserList('/api/test');
  });
  if (loading) {
    return <div>loading...</div>;
  }
  if (error) {
    return <div>{error.message}</div>;
  }
  return <div>{data.name}</div>;
};
liujiayii commented 4 years ago

今天试了试大致useModels和useRequest会用了,,就是权限不能像之前那样按角色分配了 必须得一个权限写一个?

joesdu commented 4 years ago

今天试了试大致useModels和useRequest会用了,,就是权限不能像之前那样按角色分配了 必须得一个权限写一个?

权限我还没仔细研究,看起来是需要一个权限写一个了.

liujiayii commented 4 years ago

今天试了试大致useModels和useRequest会用了,,就是权限不能像之前那样按角色分配了 必须得一个权限写一个?

权限我还没仔细研究,看起来是需要一个权限写一个了.

大佬研究一下 共同学习 image

joesdu commented 4 years ago

今天试了试大致useModels和useRequest会用了,,就是权限不能像之前那样按角色分配了 必须得一个权限写一个?

权限我还没仔细研究,看起来是需要一个权限写一个了.

大佬研究一下 共同学习 image

今天准备给公司项目升级了.得试试权限了.