gpt4 book ai didi

javascript - 每次更新状态时如何渲染元素

转载 作者:行者123 更新时间:2023-12-04 09:03:00 24 4
gpt4 key购买 nike

我正在尝试使用 React 构建一个排序可视化器。
现在我正在实现冒泡排序,我想在排序的每个阶段看到我的数组。

class Sorter extends Component {
state = {
array: [100,4,214,55,11,22,10,33],
}
bubblesorter = () => {
let arr = this.state.array
var len = arr.length,
i, j, stop;
for (i=0; i < len; i++){
for (j=0, stop=len-i; j < stop; j++){
if (arr[j] > arr[j+1]){
swap(arr, j, j+1);
}
this.setState({array:arr})
}
}
}

render() {
const array = this.state.array
// console.log(array)
return (
<div>
<h1>This is a sorter</h1>
<div className="container">
{array.map((value, id) => (
<span>
<div className="bar" key={id} style={{height: value+"px"}} >
</div>
</span>
))}
</div>
<button onClick={this.bubblesorter}>Sort</button>
</div>
)
}
最初:
enter image description here
单击“排序”后立即:
enter image description here
尽管我在每次迭代的循环中都使用了 setState,但我只能看到最终排序的数组。我想为排序的每个步骤呈现数组(并且可能使用时间延迟)。但我无法实现这一点。
有人可以帮助如何修改此代码以实现这样的功能...谢谢

最佳答案

哦,它实际上发生了变化(执行时间太快了,眼睛可以检测到),如果您在循环中设置一些延迟,您就会看到它。
例如:

bubblesorter = async () => {
let arr = this.state.array
var len = arr.length,
i, j, stop;
for (i = 0; i < len; i++) {
for (j = 0, stop = len - i; j < stop; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
// Added 1 second delay here.
await new Promise(resolve => setTimeout(resolve, 1000));
this.setState({ array: arr })
}
}
}

关于javascript - 每次更新状态时如何渲染元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63523467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com