Я сделал визуализатор алгоритма сортировки, который отображает вертикальные полосы разной высоты и сортирует их. Я использовал здесь кнопку «Создать новый массив», которая будет вызывать функцию для генерации нового массива каждый раз, и я также использовал эту функцию в функции componentDidMount (). Как изменить свойство стиля, когда я нажимаю эту кнопку? Я попытался взять document.getElementByClassName('array-bars')
в массив и изменить его свойство стиля, используя l oop, но это не принесло пользы. Я добавляю необходимый код ниже.
{ //array is const storing array of numbers which is also only state of this program.
array.map((value, idx) => (
<div
className="array-bar"
key={idx}
style={{ height: value, backgroundColor: 'turquoise' }}></div>))
}
componentDidMount(){
this.resetArray();
}
// this is called when I click generate new array
resetArray(){
const array = [];
for (let i = 0; i < 300; i++) {
array.push(randomIntFromInterval(15, 650));
}
const arrayBars = document.getElementByClassName('array-bar');
for (let i = 0; i < arrayBars.length; i++)
arrayBars[i].style.backgroundColor = 'green'; //this is failing
this.setState({ array });
}
Отредактировано: это функция, в которой я изменяю свойство стиля, используя метод, написанный в приведенном выше коде. Это работает здесь. Кроме того, можете ли вы сказать, как я могу изменить цвет в этом mergeSort () в прошлом? Я наконец попытался использовать this.setState()
, но это меняет цвет только в начале.
mergeSort(){
for(let i=0;i<animations.length;i++){
const arrayBars= document.getElementsByClassName('array-bar');
const colorChange=i%3!==2;
if(colorChange){
const [barOne,barTwo] =animations[i];
const barOneStyle=arrayBars[barOne].style;
const barTwoStyle=arrayBars[barTwo].style;
const color=i%3===0?'red':'turquoise';
setTimeout(()=>{
barOneStyle.backgroundColor=color;
barTwoStyle.backgroudColor=color;
},i*2);
}
else{
setTimeout(()=>{
const[barOne,newHeight]=animations[i];
const barOneStyle=arrayBars[barOne].style;
barOneStyle.height=newHeight+'px';
},i*2)
}
}
}