Action, Reducer,Store
Generator函数
yield
表达式本身没有返回值,或者说总是返回undefined
next
方法的参数表示上一个yield
表达式的返回值,所以在第一次使用next
方法时,传递参数是无效的
yield*
后面的 Generator 函数(没有return
语句时),等同于在 Generator 函数内部,部署一个for...of
循环
异步处理redux-saga
redux本身不能处理异步消息,因此需要中间件
在saga.js里分成三部分
①worker saga :做所有的工作,例如异步请求
②watcher : 监听dispacth的actions,调用对应的worker saga
用yeild*,表示调用一个generator函数
api: takeEvery:对每个action都回调一个函数
takeLatest:对最新的action回调一个函数
watcher里面的yield后面的操作有:
select:选择state上的一个数据select(state=>state.property)
put:相当于dispatch,put(action)
take:等待一个action, take(action.type)
call:发起一个异步操作, call(function,args),阻塞操作
fork:发起一个异步操作,非阻塞
cancel:取消一个effect,如果它已完成,则说明也不做。cancel(effect)
执行多个指令:const [A,B]=yield [call(),call()]
竞争: yield race()
const {score, timeout} = yield race({
score : call( play, getState),
timeout : call(delay, 60000)
})
③root saga:saga的入口
DVA框架里的redux-saga
{
namespace,
state,
reducers(同步),
effects(异步)
}
注意:对store里面的数组更新前必须深拷贝