redux很精简,只处理同步数据流, 异步交给中间件处理
view -> action -> reducer -> store
-
生猛的就不用中间件
使用:在view层中发起api请求,在请求的回调中dispatch(action)
缺点:view和modal耦合 -
redux-thunk (模板代码有点多但是场景基本cover得住)
使用:redux中action默认返回的是个对象{type: ‘GET_ALL_DATA’, payload: {name: ‘lala’}}
redux-thunk允许你action可以返回是个函数,在函数中进行api请求,并在请求成功/失败回调中发送对应成功/失败type的action
缺点:模板代码多,三种类型的type(start、success、fail) -
redux-promise (比redux-thunk模板代码精简些,缺状态)
使用:action返回的变回个对象,payload直接把api的promise返回,中间件替你写了promise.then成功失败的处理过程,
你不用写三种类型的type了,中间件在payload添加了status状态,供你去区别action
缺点:中间件把start状态给吃了,就暴露了success、fail,要是你想要start状态就尴尬了 -
redux-saga (有学习成本,越复杂越适合用)
使用:跳出三界之外,单拉线程,监听普通的action,调用处理函数,再发出新的action。
适于解决复杂的异步场景,比如用户一个动作要改变两个state,redux-thunk、redux-promise要么在action冗余要么在reducer冗余
缺点:generator函数、redux-saga api、响应式编程思维的学习成本