redux-thunk
详解
用于处理异步的 action, 因为 dispatch 的默认参数只能是一个 JavaScript 对象. 如果先派发一个发送请求的 action, 在派发一个处理请求结果的 action
dispatch(sendRequestAction);
dispatch(handleResponseAction);如果可以接收一个函数作为参数, 在函数体内进行异步操作, 并在异步完成后在派发相应的 action, 那么便能解决问题
store.dispatch(fetchNewBook(’learnRedux’));
function fetchNewBook(book) {
return function(dispatch) {
dispatch({
type: 'START_ FETCH_NEW_BOOK',
data: book
})
ajax({
url( `/ some/API/$(book } . ] son ` ,
type POST『, data: {}
}).then(function(bookData) {
dispatch({
type: 'FETCH_NEW_BOOK_SUCCESS',
})
})
}
}
实例
使用后
原理解析
在 redux 源码中的 createStore 函数中, enchancer 被执行,传入参数createStore,又紧接着执行其返回的函数,传入reducer和preloadedState.
在 redux-thunk 源码中
从源码我们可以看出,chain就是以next作为形参的匿名函数,至于compose只是不断传递每个函数的返回值给下一个执行函数,然后依次去执行它所有传入的函数而已,它源码中的注释说的很清楚:For example, compose(f, g, h) is identical to doing (...args) => f(g(h(...args))).
redux-thunk实现了相关异步流程内聚到redux的流程中,实现middleware的功能,也便于项目的开发与维护,避免冗余代码。而实现的方式便是改写redux中的dispatch API,使其可以除PlainObject外,接受一个函数作为参数。
最后更新于
这有帮助吗?