Dva + TypeScript + Redux -------------状态管理库的使用

1 篇文章 0 订阅

1.约束store库,框定结构及属性名


```javascript
export interface ICurrentUser {
  character: string[];
  name: string;
  phone: string;
  user_id: number;
}  
export interface UserModelState {
  currentUser: ICurrentUser;
}
export interface UserModelType {
  namespace: 'user';
  state: UserModelState;
  effects: {
    fetchCurrent: Effect;
  };
  reducers: {
    saveCurrentUser: Reducer<UserModelState>;
    addCurrentUser: Reducer<UserModelState>;
  };
  subscriptions: { setup: Subscription };

2.根据约束创建 user 数据管理库

const UserModel: UserModelType = {
  namespace: 'user',
  state: {
    currentUser: {
      name: '',
      user_id: 0,
      character: [],
      phone: '',
    },
  },
  effects: {
    *fetchCurrent(_, { call, put }) {
      const response = yield call(queryCurrent);
      yield put({
        type: 'saveCurrentUser',
        payload: response.data,
      });
      setAuthority(response.data.character);
    },
  },

  reducers: {
    saveCurrentUser(state, action) {
      return { ...state, currentUser: action.payload };
    },

    addCurrentUser(state, action) {
      return { ...state, currentUser: action.payload };
    },
  },

  subscriptions: {
    setup() {},
  },
};

``

2.1.namespace 确定仓库名

  namespace: 'user',

使用:在这里插入图片描述

2.2.state 初始化数据

state: {
    currentUser: {
      name: '',
      user_id: 0,
      character: [],
      phone: '',
    },
  },

2.3.effects

put:用于触发 action 。
call:用于调用异步逻辑,支持 promise 。

在这里插入图片描述

2.3.1 发起请求,请求到user数据
const response = yield call(queryCurrent);
2.3.2 将获取到的数据传入action里

在这里插入图片描述

2.3.3 调用util里的存localStorage的方法

在这里插入图片描述

2.4通过reducer改变state

在这里插入图片描述

3.使用 useSelector

const currentUser = useSelector(({ user }: { user: UserModelState }) => user.currentUser);

useSelector是获取redux数据管理库的方法,
user是状态管理库名称,
UserModelState 是user的约束
currentUser是数据管理器中存的数据

4.存储 useDispatch

  const dispatch = useDispatch();
  
	if (dispatch) {
        dispatch({
          type: "user/fetchCurrent",
          payload: { data },
        });
      }

type:调用的存储函数(仓库名/effect中的函数名)
payload:要存的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值