reactjs - 向用户显示“For”循环的状态
问题描述
我有一个动作需要相当长的时间才能完成。它将遍历一个包含超过 250k 个条目的数组。对于每个条目,它将执行一些逻辑。我想通知用户操作进度,这将是:
let progress = (i / array.length) * 100
如何将其添加到 redux 存储或组件状态,以便我可以在 UI 中传达当前进度?
我尝试调度一个动作(如下所示),它使用当前迭代器更新存储进度,但减速器仅在创建 for 循环时执行。
export const generateKeyMap = (mapFrom, mapTo) => {
return async (dispatch) => {
await dispatch(startGeneration()); <-- This only runs when I use a setTimeout for the following action.
setTimeout(() => {
dispatch(buildKeyMap(mapFrom, mapTo));
}, 100);
};
};
export const buildKeyMap = (mapFrom, mapTo) => {
return async (dispatch) => {
let keyMap = {};
for (let i = 0; i < mapFrom.length; i++) {
await dispatch(reportProgress(i)); // <-- This does not update in store until for loop is done.
let randomIndex = randomIntFromInterval(0, mapTo.length - 1);
let key = mapFrom[i].toString();
let value = mapTo[randomIndex].toString();
Object.assign(keyMap, { [key]: value });
mapTo.splice(randomIndex, 1);
}
await dispatch(stopGeneration());
return { type: actionTypes.DELIVERKEYMAP, payload: keyMap };
}
};
解决方案
推荐阅读
- ios - Firestore - 获取文档的子对象而不是 FIRDocumentReference
- spring - 如何配置 Spring Cloud StreamBridge 来生产 Avro?
- caching - 浏览器不缓存 AJAX GET 请求
- raspberry-pi - 如何用我的手机 (android) 控制乐高技术红外接收器?
- javascript - 单击按钮时在for循环中从数组中获取值
- r - 在 ggplot 中使用 percent(accuracy = 3L) 时,百分比不会四舍五入
- javascript - D3.js 中的 if else 语句用于自定义色标
- input - XY 图形的用户输入范围
- r - 调整以使条件面板仅在加载正确的文件时出现
- python - 如何按列值年份和月份分组以获得上个月的工资?