当编写redux-thunk
函数,被称为thunk可以很容易地提取样板的配额。例如,在我们的大部分异步API调用中,我们正在执行以下操作,没有任何副作用:还原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 })
);
};
}
简单!虽然,因为这涵盖了我们的要求的至少70%我敢肯定有一种优雅的方式抽象出配发上面的代码中,以这样的(伪代码):
export function login(loginHandle, password) {
return (dispatch, getState, api) => api('POST', LOGIN_REQUEST, '/auth/login', { loginHandle, password });
}
当我们需要检查状态和其他副作用,我们可以回到适当的thunk。尽管在大多数情况下...我们可以减少这种情况?
任何优雅的想法?
正如你在上面的问题中所看到的,我们已经注入了'api'作为参数。这个问题更关系到减少*请求,接收,失败*样板 – AndrewMcLagan
对不起,我认为“这样的东西(伪代码)”意味着你不知道'withExtraArgument()',而恰巧碰巧提示了一个类似的API 。 –
如果您想减少请求/接收/失败样板,请查看https://github.com/acdlite/redux-promise。 –