我正在实现一个日志系统,当向下滚动列表时,将调度许多LIST_ITEM_SHOWN操作。然后Saga会调用API发送日志。
我想让它等待2秒,直到不再调度LIST_ITEM_SHOWN,然后将LIST_ITEM_SHOWN操作分组为一个,以减少API调用。
这可以在佐贺级别完成吗?还是只能在组件/容器级别进行管理?
答案 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秒后,将调用实际保存。