在编写redux-thunk
函数时,称为thunk,有很多样板文件可以很容易地抽象掉。例如,在我们的大多数异步 API 调用中,我们都在执行以下操作,而没有任何副作用:
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 })
);
};
}
简单的!尽管这涵盖了我们至少 70% 的请求,但我确信有一种优雅的方法可以将上述代码的分配抽象为类似这样的内容(伪代码):
export function login(loginHandle, password) {
return (dispatch, getState, api) => api('POST', LOGIN_REQUEST, '/auth/login', { loginHandle, password });
}
当我们需要检查状态和其他副作用时,我们可以返回到适当的 thunk。虽然在大多数情况下......我们可以减少这个?
有什么优雅的想法吗?