问题描述:
在react中使用redux-actions,redux-sage, 只有在第一次进入页面才会执行action,其余操作无法触发action。
发现问题:
//代码片段
function* watch_get_data_list() {
const action = yield take(actions.SALARY_LIST_GET_LIST_REQUEST_TYPE.toString())
yield call(get_data_list, action)
}
在 take 初次的 SALARY_LIST_GET_LIST_REQUEST_TYPE
action 之后, watch_get_data_list
Saga 将会yield call(get_data_list, action)
然后中止。这意味着 Generator
会被回收并且相应的监听不会再发生
问题原因:
缺少 where(true)
function* watch_get_data_list() {
while (true) {
const action = yield take(actions.SALARY_LIST_GET_LIST_REQUEST_TYPE.toString())
yield call(get_data_list, action)
}
}
我们需要运行了一个无限循环的 while(true)。记住这是一个 Generator 函数,它不具备 从运行至完成 的行为(run-to-completion behavior)。 Generator 将在每次迭代阻塞以等待 action 发起。