我正在尝试使用冒泡排序对数组进行排序,并且在排序的每一步我都想呈现数组内值位置的变化。因此,使用 React 制作了以下算法,它在第一次渲染更改但随后停止,不渲染任何内容。我试图控制台记录我正在渲染的数组,并且我在控制台上获得了每个排序步骤,但不知道为什么它在这里不起作用。谁能告诉我为什么会这样?还有什么可以做的?
注意:它工作正常并最初呈现排序数组,但后来当我添加setTimeOut函数时它不起作用。
应用程序.js
import React, { useState } from "react";
const App = () => {
const [arrayForSort, setArrayForSort] = useState([44,2,46,11,15,34,1,7,55]);
const fetchArray = arrayForSort.map((element) => {
return <span>{element} </span>;
});
const bubbleSort = (array) => {
let newArray = [...array];
let n = newArray.length;
for (let i = 0; i < n; i++) {
for (let j = 0; j < n - i; j++) {
const myVar = setTimeout(() => {
if (newArray[j] > newArray[j + 1]) {
[newArray[j], newArray[j + 1]] = [newArray[j + 1], newArray[j]];
}
console.log(newArray); // render each step of sort
setArrayForSort(newArray); // on screen it just shows "2 44 46 11 15 34 1 7 55" the very first step of sort
}, 2000);
}
}
};
return (
<div>
<h4>Array: </h4>
<span>{fetchArray}</span>
<div>
<button
onClick={() => {
bubbleSort(arrayForSort);
}}
>
Sort
</button>
</div>
</div>
);
};
export default App;