[react]redux异步处理和重写useDispatch

打印 上一主题 下一主题

主题 868|帖子 868|积分 2604

异步代码
  1. import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
  2. import { getBanner } from '../http/request';
  3. import store from '@/store';
  4. export const fetchBanner = createAsyncThunk(
  5.     'recommend/banners',
  6.     async (args, thunkAPI) => {
  7.         const response = await getBanner();
  8.         thunkAPI.dispatch(getBannerAction(response.data));
  9.     },
  10. );
  11. const recommendStore = createSlice({
  12.     name: 'recommend',
  13.     initialState: {
  14.         banners: [],
  15.     },
  16.     reducers: {
  17.         getBannerAction(state, { payload }) {
  18.             console.log('得到', payload);
  19.             state.banners = payload.banners;
  20.         },
  21.     },
  22. });
  23. export const { getBannerAction } = recommendStore.actions;
  24. export default recommendStore.reducer;
复制代码
外面调用的是
  1.   dispatch(fetchBanner());
复制代码
但是ts会报错
   类型“AsyncThunkAction<any, void, AsyncThunkConfig>”的参数不能赋给类型“UnknownAction”的参数。ts
  这时间来到总仓库 把  dispatch改装一下
  1. // dispatch
  2. export type AppDispatch = typeof store.dispatch;
  3. export const useAppDispatch = () => useDispatch<AppDispatch>();
复制代码
 或者
  1. type AppDispatch = typeof store.dispatch;
  2. export const useAppDispatch: () => AppDispatch = useDispatch;
复制代码
外面就可以用了,ts不会报错了
  1.     useEffect(() => {
  2.         dispatch(fetchBanner());
  3.     }, []);
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

飞不高

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表