Redux-Saga等待并合并多个动作

时间:2019-01-22 02:28:03

标签: react-native redux redux-saga

我正在实现一个日志系统,当向下滚动列表时,将调度许多LIST_ITEM_SHOWN操作。然后Saga会调用API发送日志。

我想让它等待2秒,直到不再调度LIST_ITEM_SHOWN,然后将LIST_ITEM_SHOWN操作分组为一个,以减少API调用。

这可以在佐贺级别完成吗?还是只能在组件/容器级别进行管理?

1 个答案:

答案 0 :(得分:0)

是的,在传奇中很容易实现:

yield takeLatest('LIST_ITEM_SHOWN', watchListItemShown);

因此,采取最新的LIST_ITEM_SHOWN操作来存储到日志中,因此,如果有多个操作-先前的任务将被取消(不会在delay之后执行)。

// for simplicity storing logs in private variable, consider using redux or something similar
let logs = []; 
function* watchListItemShown(action) {
  yield call(logs.push, action.payload);
  yield call(delay, 2000); 
  yield call(saveToApi, logs);
  logs = []; 
}

因此,在每个LIST_ITEM_SHOWN操作中,您都将日志存储到局部变量中(可以考虑使用redux或类似的方法,这样可以通过reducer进行更好的日志管理)。延迟2秒后,将调用实际保存。