Podczas pisania funkcji redux-thunk
, znanych jako thunks, istnieje wiele elementów, które można łatwo usunąć. Na przykład w większości naszych połączeń asynchronicznych API wykonujemy następujące czynności bez żadnych skutków ubocznych:Redukcja płytki redukcyjnej redux-thunk
export const LOGIN_REQUEST = 'my-app/auth/LOGIN_REQUEST';
export const LOGIN_RECIEVE = 'my-app/auth/LOGIN_RECIEVE';
export const LOGIN_FAILURE = 'my-app/auth/LOGIN_FAILURE';
// ... reducer code here
export function login(loginHandle, password) {
return (dispatch, getState, api) => {
dispatch({ type: LOGIN_REQUEST });
api.post('/auth/login', { loginHandle, password }).then(
response => dispatch({ type: LOGIN_RECIEVE, response }),
error => dispatch({ type: LOGIN_FAILURE, error })
);
};
}
Easy! Chociaż jak to obejmuje co najmniej 70% naszych żądań Jestem pewien, że jest to elegancki sposób abstrakcyjny z dala przydzieleniu powyższym kodem do czegoś tak (pseudo kod):
export function login(loginHandle, password) {
return (dispatch, getState, api) => api('POST', LOGIN_REQUEST, '/auth/login', { loginHandle, password });
}
Kiedy trzeba sprawdzić stan i inne efekty uboczne możemy cofnąć do właściwego thunk. Chociaż w większości przypadków ... moglibyśmy to ograniczyć?
Jakieś eleganckie pomysły?
Jak widzisz w powyższym pytaniu, już wstrzykiwamy nasze "api" jako argument. Problem był bardziej związany z redukcją * request, receive, fail * boilerplate – AndrewMcLagan
Niestety, myślałem, że "coś takiego (pseudo-kod)" oznacza, że nie zdawałeś sobie sprawy z 'withExtraArgument()' i właśnie zdarzyło ci się zasugerować podobny API . –
Aby zmniejszyć liczbę żądań/braków/braków, należy sprawdzić stronę https://github.com/acdlite/redux-promise. –