Redux-сага ждет и объединяет несколько действий - PullRequest
0 голосов
/ 22 января 2019

Я внедряю систему журналов, когда при прокрутке списка будет отправлено много действий LIST_ITEM_SHOWN. Затем Сага вызовет API для отправки журнала.

Я хочу заставить его ждать, например, 2 секунды, пока больше не будет отправлено LIST_ITEM_SHOWN, и сгруппируйте действия LIST_ITEM_SHOWN в одно, чтобы уменьшить вызов API.

Можно ли это сделать на уровне саги? или можно управлять только на уровне компонента / контейнера?

1 Ответ

0 голосов
/ 22 января 2019

Да, это довольно легко реализовать в саге:

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 или что-то подобное, так что вы будете делать журналы лучшеуправление через редукторы).И после 2 секундной задержки вызывается фактическое сохранение.

...