Quando si scrivono le funzioni redux-thunk
, note come thunk, è disponibile un numero di piastra che può essere facilmente estratto. Ad esempio nella maggior parte delle nostre chiamate API asincrone stiamo facendo quanto segue, senza effetti collaterali:Riduzione della piastra di riscaldamento 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 })
);
};
}
Facile! Anche se, come questo copre almeno il 70% delle nostre richieste sono sicuro che ci sia un modo elegante per astrarre assegnare di codice di cui sopra a qualcosa di simile (pseudo codice):
export function login(loginHandle, password) {
return (dispatch, getState, api) => api('POST', LOGIN_REQUEST, '/auth/login', { loginHandle, password });
}
Quando abbiamo bisogno di controllare la stato e altri effetti collaterali possiamo tornare a un thunk adeguato. Anche se per la maggior parte dei casi ... potremmo abbatterlo?
Qualche idea elegante?
Come potete vedere nella mia domanda sopra, stiamo già inserendo il nostro 'api' come argomento. Il problema era più correlato alla riduzione della richiesta *, ricezione, fail * boilerplate – AndrewMcLagan
Scusa, ho pensato "qualcosa come questo (pseudo codice)" significava che non eri a conoscenza di 'withExtraArgument()' e mi è capitato di suggerire un'API simile . –
Se si desidera ridurre la richiesta/ricezione/fail standard, consultare https://github.com/acdlite/redux-promise. –