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-thunk

实例

使用后

原理解析

在 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外,接受一个函数作为参数。

最后更新于

这有帮助吗?