TypeError: Cannot read property 'style' of undefined error
TypeError: Cannot read property 'style' of undefined error
我正在 React 中制作快速排序算法可视化器的动画。虽然我的代码不是最终的并且我仍在处理它,但我收到“类型错误:无法读取未定义的 属性 'style'”错误。我正在通过这个项目学习 React,但无法弄清楚是什么导致了这个错误。错误来自这一行:const barOneStyle = arrayBars[barOneIndex].style;
quickSort() {
const animations = getQuickSortAnimations(this.state.array);
for (let i = 0; i < animations.length; i++) {
const isColorChange = animations[i][0] === "comparision1" || animations[i][0] === "comparision2";
const arrayBars = document.getElementsByClassName('array-bar');
if(isColorChange === true) {
const [comparision, barOneIndex, barTwoIndex] = animations[i];
const color = (animations[i][0] === "comparision1") ? 'navy' : 'pink';
const barOneStyle = arrayBars[barOneIndex].style;
const barTwoStyle = arrayBars[barTwoIndex].style;
setTimeout(() => {
barOneStyle.backgroundColor = color;
barTwoStyle.backgroundColor = color;
},i * ANIMATION_SPEED_MS);
}
else {
const [barIndex, newHeight] = animations[i];
if (barIndex === -1) {
continue;
}
const barStyle = arrayBars[barIndex].style;
setTimeout(() => {
barStyle.height = `${newHeight}px`;
},i * ANIMATION_SPEED_MS);
} }
//this.setState({array: sortArray})
//const RESTORE_TIME = parseInt(ANIMATION_SPEED_MS*animations.length/2 + 3000);
//setTimeout(() => this.restoreStoreButtons(), RESTORE_TIME);
}
我没有在同一个项目中得到合并排序的这个错误:
mergeSort() {
const animations = getMergeSortAnimations(this.state.array);
for (let i= 0; i < animations.length; i++) {
const arrayBars = document.getElementsByClassName('array-bar');
const isColorChange = i % 3 !== 2;
if (isColorChange) {
const [barOneIdx, barTwoIdx] = animations[i];
const barOneStyle = arrayBars[barOneIdx].style;
const barTwoStyle = arrayBars[barTwoIdx].style;
const color = i% 3 === 0 ? 'navy' : 'pink';
setTimeout(() => {
barOneStyle.backgroundColor = color;
barTwoStyle.backgroundColor = color;
}, i * ANIMATION_SPEED_MS);
} else {
setTimeout(() => {
const [barOneIdx, newHeight] = animations[i];
const barOneStyle = arrayBars[barOneIdx].style;
barOneStyle.height = `${newHeight}px`;
}, i * ANIMATION_SPEED_MS);
}
}
}
我怀疑其中之一或两者:
const barOneStyle = arrayBars[barOneIndex].style;
const barTwoStyle = arrayBars[barTwoIndex].style;
调用数组中不存在的索引。
或在其他地方
const barStyle = arrayBars[barIndex].style;
但这应该是显而易见的
试试这个
quickSort() {
const animations = getQuickSortAnimations(this.state.array);
for (let i = 0; i < animations.length; i++) {
const isColorChange = animations[i][0] === "comparision1" || animations[i][0] === "comparision2";
const arrayBars = document.getElementsByClassName('array-bar');
if(isColorChange === true) {
const [comparision, barOneIndex, barTwoIndex] = animations[i];
const color = (animations[i][0] === "comparision1") ? 'navy' : 'pink';
const barOneStyle = arrayBars[barOneIndex]?arrayBars[barOneIndex].style: {};
const barTwoStyle = arrayBars[barTwoIndex]?arrayBars[barTwoIndex].style:{};
setTimeout(() => {
barOneStyle.backgroundColor = color;
barTwoStyle.backgroundColor = color;
},i * ANIMATION_SPEED_MS);
}
else {
const [barIndex, newHeight] = animations[i];
if (barIndex === -1) {
continue;
}
const barStyle = arrayBars[barIndex]?arrayBars[barIndex].style:{};
setTimeout(() => {
barStyle.height = `${newHeight}px`;
},i * ANIMATION_SPEED_MS);
} }
}
我正在 React 中制作快速排序算法可视化器的动画。虽然我的代码不是最终的并且我仍在处理它,但我收到“类型错误:无法读取未定义的 属性 'style'”错误。我正在通过这个项目学习 React,但无法弄清楚是什么导致了这个错误。错误来自这一行:const barOneStyle = arrayBars[barOneIndex].style;
quickSort() {
const animations = getQuickSortAnimations(this.state.array);
for (let i = 0; i < animations.length; i++) {
const isColorChange = animations[i][0] === "comparision1" || animations[i][0] === "comparision2";
const arrayBars = document.getElementsByClassName('array-bar');
if(isColorChange === true) {
const [comparision, barOneIndex, barTwoIndex] = animations[i];
const color = (animations[i][0] === "comparision1") ? 'navy' : 'pink';
const barOneStyle = arrayBars[barOneIndex].style;
const barTwoStyle = arrayBars[barTwoIndex].style;
setTimeout(() => {
barOneStyle.backgroundColor = color;
barTwoStyle.backgroundColor = color;
},i * ANIMATION_SPEED_MS);
}
else {
const [barIndex, newHeight] = animations[i];
if (barIndex === -1) {
continue;
}
const barStyle = arrayBars[barIndex].style;
setTimeout(() => {
barStyle.height = `${newHeight}px`;
},i * ANIMATION_SPEED_MS);
} }
//this.setState({array: sortArray})
//const RESTORE_TIME = parseInt(ANIMATION_SPEED_MS*animations.length/2 + 3000);
//setTimeout(() => this.restoreStoreButtons(), RESTORE_TIME);
}
我没有在同一个项目中得到合并排序的这个错误:
mergeSort() {
const animations = getMergeSortAnimations(this.state.array);
for (let i= 0; i < animations.length; i++) {
const arrayBars = document.getElementsByClassName('array-bar');
const isColorChange = i % 3 !== 2;
if (isColorChange) {
const [barOneIdx, barTwoIdx] = animations[i];
const barOneStyle = arrayBars[barOneIdx].style;
const barTwoStyle = arrayBars[barTwoIdx].style;
const color = i% 3 === 0 ? 'navy' : 'pink';
setTimeout(() => {
barOneStyle.backgroundColor = color;
barTwoStyle.backgroundColor = color;
}, i * ANIMATION_SPEED_MS);
} else {
setTimeout(() => {
const [barOneIdx, newHeight] = animations[i];
const barOneStyle = arrayBars[barOneIdx].style;
barOneStyle.height = `${newHeight}px`;
}, i * ANIMATION_SPEED_MS);
}
}
}
我怀疑其中之一或两者:
const barOneStyle = arrayBars[barOneIndex].style;
const barTwoStyle = arrayBars[barTwoIndex].style;
调用数组中不存在的索引。
或在其他地方
const barStyle = arrayBars[barIndex].style;
但这应该是显而易见的
试试这个
quickSort() {
const animations = getQuickSortAnimations(this.state.array);
for (let i = 0; i < animations.length; i++) {
const isColorChange = animations[i][0] === "comparision1" || animations[i][0] === "comparision2";
const arrayBars = document.getElementsByClassName('array-bar');
if(isColorChange === true) {
const [comparision, barOneIndex, barTwoIndex] = animations[i];
const color = (animations[i][0] === "comparision1") ? 'navy' : 'pink';
const barOneStyle = arrayBars[barOneIndex]?arrayBars[barOneIndex].style: {};
const barTwoStyle = arrayBars[barTwoIndex]?arrayBars[barTwoIndex].style:{};
setTimeout(() => {
barOneStyle.backgroundColor = color;
barTwoStyle.backgroundColor = color;
},i * ANIMATION_SPEED_MS);
}
else {
const [barIndex, newHeight] = animations[i];
if (barIndex === -1) {
continue;
}
const barStyle = arrayBars[barIndex]?arrayBars[barIndex].style:{};
setTimeout(() => {
barStyle.height = `${newHeight}px`;
},i * ANIMATION_SPEED_MS);
} }
}