Я пишу свои действия и редукторы с помощью преобразователей, которые отправляют действия _PENDING
, _FULFILLED
и _REJECTED
. Однако мне нужно лучшее решение, чтобы избежать шаблонов. Я перехожу на Typescript, который удваивает этот шаблон, требуя интерфейса для каждого действия _PENDING
, _FULFILLED
и _REJECTED
. Это просто выходит из-под контроля. Есть ли способ получить такую же / аналогичную функциональность моего кода, не имея трех типов действий для каждого преобразователя?
localUserReducer.js
const initialState = {
fetching: false,
fetched: false,
user: undefined,
errors: undefined,
};
export default function (state = initialState, action) {
switch (action.type) {
case 'GET_USER_PENDING':
return {
...state,
fetching: true,
};
case 'GET_USER_FULFILLED':
return {
...state,
fetching: false,
fetched: true,
user: action.payload,
};
case 'GET_USER_REJECTED':
return {
...state,
fetching: false,
errors: action.payload,
};
default:
return state;
}
}
localUserActions.js
import axios from 'axios';
export const getUser = () => async (dispatch) => {
dispatch({ type: 'GET_USER_PENDING' });
try {
const { data } = await axios.get('/api/auth/local/current');
dispatch({ type: 'GET_USER_FULFILLED', payload: data });
} catch (err) {
dispatch({ type: 'GET_USER_REJECTED', payload: err.response.data });
}
};
Я могу неправильно понять redux-thunk, поскольку я новичок. Я не понимаю, как я могу отправлять _REJECTED
действий, если я использую реализацию Typescript и redux-thunk, описанную здесь: https://redux.js.org/recipes/usage-with-typescript#usage-with-redux-thunk