重要的!这不是异步 API 的问题!我试图创建一个冒泡排序可视化器,当我运行算法本身时,我希望用户真正看到它的实际效果。因此,每次我进行交换时,我都希望用户能够看到它的发生。当内部的循环bubbleSort运行并更新状态Classes和Array时,没有任何反应,直到循环完全结束。如果我将 abreak;放入循环中,则在循环停止时做出反应。问题是什么?我该如何解决?
编辑:
如果您有答案,请解释它为什么起作用,以及我应该如何在我的代码中使用它。
import React, { useState, useEffect } from "react";
import "./SortingVisualizer.css";
import { render } from "@testing-library/react";
const SortingVisualizer = () => {
const [getArray, setArray] = useState([]);
const [getClasses, setClasses] = useState([""]);
useEffect(() => {
resetArray(200);
}, []);
useEffect(() => {}, [getArray, getClasses]);
const resetArray = size => {
const array = [];
const classesArray = [];
for (let i = 0; i < size; i++) {
array.push(randomInt(20, 800));
classesArray.push("array-bar");
}
setArray(array);
setClasses(classesArray);
};
const bubbleSort = delay => {
let temp,
array = Object.assign([], getArray),
classes = Object.assign([], getClasses);
for (let i = array.length; i > 0; i--) {
for (let j = 0; j < i - 1; j++) {
classes[j] = "array-bar compared-bar";
classes[j + 1] = "array-bar compared-bar";
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
//console.log((array.length - i) * 200 + (j + 1));
setArray(array);
setClasses(classes);
break;
}
}
console.log("done.");
};
神不在的星期二
慕慕森
缥缈止盈
相关分类