Javascript 如何在react js中设置具有时间延迟的循环内的状态

Javascript 如何在react js中设置具有时间延迟的循环内的状态,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我试图制作一个程序来可视化ReactJS中的冒泡排序,我试图在一个循环中延迟更新数组的状态。但是数组的状态只更新一次。我不明白它怎么了。这种方式在react中更新状态是否错误 我正在更新useffect()中数组的状态,并通过“onClick”事件调用bubbleSort() 从'react'导入{useState,useffect,useRef} 函数App(){ 让计数=0; 常量[array,setArray]=useState([]) const barBoundary=useRef(n

我试图制作一个程序来可视化ReactJS中的冒泡排序,我试图在一个循环中延迟更新数组的状态。但是数组的状态只更新一次。我不明白它怎么了。这种方式在react中更新状态是否错误

我正在更新useffect()中数组的状态,并通过“onClick”事件调用bubbleSort()

从'react'导入{useState,useffect,useRef}
函数App(){
让计数=0;
常量[array,setArray]=useState([])
const barBoundary=useRef(null)
useffect(()=>{
计数=0;
setArray(发电机阵列(1100400))
}, [])
const generatarray=(最小值、最大值、l)=>{
返回Array.from({length:l},()=>Math.floor(Math.random()*(max-min)+min));
}
常量睡眠=(毫)=>{
返回新承诺(解析=>setTimeout(解析,毫秒)
}
常量bubbleSort=async(速度)=>{
设temp=[…数组];
设len=array.length;
让我们检查一下;
做{
选中=错误;
for(设i=0;i温度[i+1]){
设tmp=temp[i];
温度[i]=温度[i+1];
温度[i+1]=tmp;
等待睡眠(10)
设置阵列(临时)
选中=正确;
}
}
}同时(检查);
}
返回(
  • setArray(generateArray(1100700))}>气泡排序
  • bubbleSort()}>排序
{ array.map(项=>{ 返回( ) }) } ); } 导出默认应用程序;
这就是问题所在,您的数组引用的是同一个实例,不会重新渲染。请从
temp
array创建一个新数组,并设置状态。它正常工作

setArray([...temp])

在哪里初始化数组?数组是否包含任何值?我正在useEffect()中设置数组的状态。数组中的值是通过随机值生成方法生成的。您可以共享从何处调用bubbelsort函数的useEffect和代码吗?我已经编辑了这个问题。请看一看。您缺少一个结束参数:
返回新承诺(resolve=>setTimeout(resolve,milli)
@Mayank,请检查!!
setArray([...temp])