Redux-thunk允许您创建返回函数而不是操作的操作创建器。内部函数接收存储方法dispatch和getState作为参数。
function incrementAsync() {
return (dispatch, getState) => {
setTimeout(() => {
dispatch(increment());
}, 1000);
};
}但与此同时,react-redux的connect已经有了一个mapDispatchToProps参数,可用于将操作创建器包装到调度调用中,以便可以直接调用它们。使用mapDispatchToProps,您已经可以这样做,
const mapDispatchToProps = (dispatch) => ({
incrementAsync: () => {
setTimeout(() => {
dispatch(increment());
}, 1000);
}
});
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent)在我看来,没有redux-thunk也可以做到这一点。为什么我们首先要有redux-thunk库呢?我确信我只是看不到它,因为redux-thunk是一个相当流行的库。
发布于 2018-08-25 05:14:01
确实,您可以通过这种方式从操作访问dispatch,但是redux-thunk使之成为可能,而不需要包装器函数和显式分派移交。
您还可以通过作为第二个参数提供的getState()函数从您的操作中立即访问状态。
// actionFile.js
export someAction(dispatch) {
return function(value) {
dispatch({ type: 'SOME_TYPE', value });
}
}
// component.jsx
const mapDispatchToProps = (dispatch) => ({
someAction: someAction(dispatch)
});与
// actionFile.js
export someAction(value) {
return function(dispatch, getState) {
dispatch({ type: 'SOME_TYPE', value });
// maybe do some stuff with getState()
}
}
// component.jsx
const mapDispatchToProps = { someAction };它绝对是可选的,但在我看来要干净得多,最重要的是在组件和动作创建者之间提供了更好的关注点分离。也就是说,当你需要异步调度或触发副作用时,你不需要为如何定义你的mapDispatchToProps而烦恼。
https://stackoverflow.com/questions/44493294
复制相似问题