Получаю ошибку при вызове в useEffect асинхронного экшена, как это исправить?
При вызове асинхронного экшена в useEffect получаю вот такую ошибку:
TS2345: Argument of type '(dispatch: Dispatch<UserAction>) => Promise<void>' is not assignable to parameter of type 'AnyAction'. Property 'type' is missing in type '(dispatch: Dispatch<UserAction>) => Promise<void>' but required in type 'AnyAction'.
Компонент где сам запрос
export const fetchUsers = () => {
return async (dispatch: Dispatch<UserAction>) => {
try{
dispatch({type: UserActionTypes.FETCH_USERS})
const response = await $api.get('/users')
dispatch({type: UserActionTypes.FETCH_USERS_SUCCESS, payload:response.data})
} catch (e) {
dispatch({
type: UserActionTypes.FETCH_USERS_ERROR,
payload: 'User loading error'
})
}
}
}
Компонент где делаю запрос в useEffect
export const Users: React.FC = () => {
const {users,error,loading} = useTypedSelector(state =>state.user)
const dispatch = useDispatch()
useEffect( () => {
dispatch(fetchUsers())
},[])
return (
<div>
</div>
);
};
Компонент где сами типы
export enum UserActionTypes {
FETCH_USERS = 'FETCH_USERS',
FETCH_USERS_SUCCESS = 'FETCH_USERS_SUCCESS',
FETCH_USERS_ERROR = 'FETCH_USERS_ERROR'
}
interface FetchUsersAction {
type: UserActionTypes.FETCH_USERS
}
interface FetchUsersSuccessAction {
type: UserActionTypes.FETCH_USERS_SUCCESS;
payload: any[]
}
interface FetchUsersErrorAction {
type: UserActionTypes.FETCH_USERS_ERROR;
payload:string;
}
export type UserAction = FetchUsersAction | FetchUsersSuccessAction | FetchUsersErrorAction
export interface UserState {
users: any[];
loading: boolean;
error: null | string;
}
Ответы (1 шт):
Автор решения: Alex
→ Ссылка
я сделал вот так:
const dispatch: any = useDispatch()
в useEffect в подобной ситуации, и код выполнился без ошибки, попробуйте. Добавил условие : any