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

标签 javascript reactjs

我正在尝试使用 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/

相关文章:

javascript - react JS |根据标志显示或隐藏对象数组

javascript - React/Redux - 处理错误和错误代码

javascript - 如何在react js中插入多维数组数据?

javascript - 如何使用 css3 翻转并更改元素?

javascript - 如何在 javascript 中构建正则表达式匹配

javascript - 通过每个级别上的单独条件查找匹配的嵌套对象数组

javascript - 状态改变时不会重新渲染

javascript - 如果瞄准镜没用了,会被清理吗?

javascript - JavaScript 中的指针?

javascript - Jquery 触发器不起作用