我正在学习 react 并构建了一个简单的程序来生成数组并改变它的颜色。我不明白为什么当我生成新数组时会保留前一个数组的颜色。我认为这是因为当我生成一个新数组时状态发生了变化 react 将重新渲染组件并且颜色将设置回默认值。我错过了什么?
这是我的代码:
import React, { useState, useEffect } from 'react';
const Dummy2 = () => {
const [arr, setArr] = useState([]);
useEffect(() => {
generateArray();
}, []);
const generateArray = () => {
const temp = [];
for(let i = 1; i < 11; i++) {
temp.push(i * 2);
}
setArr(temp);
}
const changeColor = () => {
const arrayElements = document.getElementsByClassName('array-element');
for(let i = 0; i < arrayElements.length; i++) {
arrayElements[i].style.backgroundColor = 'red';
}
}
return (
<div>
<div className="array-container">
{arr.map((value, idx) => (
<div className="array-element"
key={idx}
style={{height: `${value}px`,
weight: `${value}px`,
margin: '1px 1px',
backgroundColor: 'blue'}}
></div>))
}
</div>
<div>
<button onClick={() => changeColor()}>change-color!</button>
<button onClick={() => generateArray()}>new-array</button>
</div>
</div>
);
}
export default Dummy2;
编辑:我设法通过添加以下功能来解决这个问题
const resetColors = () => {
const arrayBars = document.getElementsByClassName('array-element');
for(let i = 0; i < arrayBars.length; i++) {
arrayBars[i].style.backgroundColor = 'blue';
}
}
每当阵列重置时,我都会调用它。
但我仍然不明白为什么要保留样式。