【发布时间】:2022-04-23 01:20:21
【问题描述】:
我正在构建一个排序算法可视化器,在我的回报中,我正在创建 div 来表示垂直条,在 animatedBubbleSort() 中我在超时时交换状态数组中的值,数组正在排序,但我预计会发生的是,每次使用 updateArray() 更改状态时都会重新渲染 .map 函数。但是 .map 函数根本不会重新触发。
import React, { useState } from "react";
import "../styles/App.css";
import { Header } from "./Header";
export default function SortingVisualizer(props) {
const LOWER_BOUND = 5;
const UPPER_BOUND = 200;
const ARRAY_SIZE = 200;
const [array, updateArray] = useState(fillArrayWithRandomValues);
// returns a random number between bounds inclusive
function randomNumberBetweenBounds() {
return Math.floor(Math.random() * UPPER_BOUND) + LOWER_BOUND;
}
// fills array with random values
function fillArrayWithRandomValues() {
let tempArray = [];
for (let i = 0; i < ARRAY_SIZE; i++) {
tempArray.push(randomNumberBetweenBounds());
}
return tempArray;
}
function animatedBubbleSort() {
let tempArr = array;
let len = tempArr.length;
for (let i = 0; i < len; i++) {
for (let j = 0; j < len; j++) {
if (tempArr[j] > tempArr[j + 1]) {
let tmp = tempArr[j];
tempArr[j] = tempArr[j + 1];
tempArr[j + 1] = tmp;
setTimeout(() => {
updateArray(tempArr);
}, 300 * i);
}
}
}
}
return (
<div>
<Header bubbleSort={animatedBubbleSort} />
<div className="array-container">
{array.map((value, idx) => {
return (
<div
style={{ height: `${value * 2}px` }}
className="array-bar"
key={idx}
></div>
);
})}
</div>
</div>
);
}
【问题讨论】:
-
因为你使用索引作为键; react 使用
key来决定要重新渲染哪些元素,但是因为您的键始终处于相同的顺序,所以 react 不会更新任何内容。尝试使用value作为您的密钥
标签: javascript reactjs