Я хочу, чтобы во время анализа большого набора данных отображался прогресс (это может занять несколько секунд). Следующие действия обрабатываются внутри оценки Promise (.then()
вызывает API выборки браузера). Я создал функцию генератора, которая будет генерировать объекты, чтобы я мог обрабатывать изменение состояния редукции вне синтаксического анализатора logi c:
function* parseSDF(name) {
const parser = new Parser(name, null)
while (parser.next()) {
// ... parsing data
yield {...data}
}
}
Затем я перебираю генератор (я использую машинописный текст с --downlevelIteration
флаг включен) и каждые 50 или около того итераций я хочу обновлять состояние
const processMs = (sdf) => {
const progress = parseSDF(sdf);
const ms = [];
let counter = 0;
for (let m of progress) {
ms.push({ ...m, id: ++counter });
if (counter % 50 === 0) {
setMsLoadingProgress(counter);
console.log(counter);
}
setMsLoadingProgress(counter);
}
setMs(ms);
};
Однако, хотя консоль регистрирует прогресс с ~ 0,5 секунды между каждым журналом, реакция не выполняется повторно при изменении хранилища redux . Вместо этого он повторно отображает один раз после завершения синтаксического анализа, поэтому это не проблема с тем, как redux подключен для реагирования.
- Почему реакция не перерисовывается каждый раз, когда я меняю состояние?
- Как я могу заставить это работать?
- Есть ли лучший шаблон для отображения прогресса в моем интерфейсе?