我不能理解redux无法处理异步状态这个说法

我的理解是,redux-thunk或redux-saga的出现只是为了把异步业务代码从组件剥离,而并非解决redux无法处理异步状态问题的把?

纯redux使用中,完全可以在useEffect调用接口,并在回调函数中dispatch同步action,

import {fetchUser} from './services'
import {saveUser} from './actions'

function App({dispatch}) {
    useEffect(() => {
        fetchUser().then(res => dispatch(saveUser(res.user)))
    }, [])
}

相比较纯redux,redux-thunk只不过把调用接口封装成了一个异步action creator而已啊,

import {fetchUser} from './services'
import {saveUser} from './actions'

function saveUserAsync() {
    return function (dispatch) {
        fetchUser().then(res => dispatch(saveUser(res.user)))
    }
}
function App({dispatch}) {
    useEffect(() => {
        dispatch(saveUserAsync())
    }, [])
}

redux-saga和redux-thunk类似,只不过用的是generater函数而已。

我想请教一下,我这么理解有什么问题吗?

阅读 2.6k
1 个回答

无法处理异步指的是reducer内不能处理异步,因为规定reducer要为纯函数,不能有副作用
像redux-thunk是增强dispatch的能力,你dispatch特定的东西会先由redux-thunk中间件处理,然后再合适的条件下再去dispatch实际的action调用reducer去处理
像你这种在useEffect去处理副作用(异步请求)就和redux无关了,和redux无法处理异步状态并不矛盾

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题