TypeError: невозможно прочесть свойство style из undefined

export class EstimateForm extends React.Component<IEstimateFormProps, 
IEstimateFormState> {
state: IEstimateFormState = {
cellUpdateCss: 'red',
toRow: null,
fromRow: null,
estimateList: null,
estimateItemList: [],
poseList: null,
levelList: null,
partList: null,
selectedEstimate: null,
totalEstimateItems: 0,
selectedIndexes: [],
totalEstimateAmount: 0,
grid: null,
projectId: 0,
};


constructor(props, context) {
super(props, context);
this.state.estimateList = this.props.estimateList;
}  


rowGetter = i => {
const row = this.state.estimateItemList[i];
const selectRevison = this.state.selectedEstimate.revision;
if (row['pose.poseName']) {
const poseCode = 
row['pose.poseName'].substring(row['pose.poseName'].lastIndexOf('[') + 1, 
row['pose.poseName'].lastIndexOf(']'));
for (const pose of this.state.poseList) {
if (pose.poseCode === poseCode) {
  row.pose = pose;
}
}
}

if (row['level.levelName']) {
const levelCode = row['level.levelName'].substring(
row['level.levelName'].lastIndexOf('[') + 1,
row['level.levelName'].lastIndexOf(']')
);
for (const level of this.state.levelList) {
  if (level.levelCode === levelCode) {
  row.level = level;
}
}
}

 if (row['level.part.partName']) {
 const partCode = row['level.part.partName'].substring(
 row['level.part.partName'].lastIndexOf('[') + 1,
 row['level.part.partName'].lastIndexOf(']')
 );
for (const part of this.state.partList) {
if (part.partCode === partCode) {
  row.part = part;
  }
 }
}

row.get = key => eval('row.' + key);
row.totalCost = (row.materialCost + row.laborCost) * row.amount;
const changeColor = {
  backgroundcolor: 'red'
  };
const all = document.getElementsByClassName('react-grid-Row') as 
HTMLCollectionOf<HTMLElement>;
debugger; if (row.revision > selectRevison) {
 for (let i = this.state.fromRow; i <= this.state.toRow; i++) {
      all[i].style.color = 'red';   //HERE
}
return row;
}
}

handleGridRowsUpdated = ({ fromRow, toRow, updated }) => {
const rows = this.state.estimateItemList.slice();

for (let i = fromRow; i <= toRow; i++) {
const rowToUpdate = rows[i];
const updatedRow = update(rowToUpdate, { $merge: updated });
rows[i] = updatedRow;
}

this.setState({ estimateItemList: rows, fromRow: (fromRow), toRow: (toRow) 
}, () => {
});

};

saveEstimateItems = () => {
if (this.state.selectedEstimate == null) {
toast.warn(<Translate 
contentKey = "bpmApp.estimateForm.pleaseSelectEstimate">Please select an 
estimate</Translate>);
return;
}



render() {

return ()
}

Я хочу изменить цвет строки, когда условие row.revision> this.state.selectedEstimate.revision. Как я могу предотвратить изменение this.color. Однако TypeError: невозможно прочитать свойство «style» неопределенного значения, получить ошибку, но цвет строки не изменился. Как я могу решить эту проблему? Это мой первый проект в React, и я не знаю, в чем проблема. Спасибо за ваши отзывы, ребята.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 474
1

Ответы 1

Итак, без остального контекста, потому что ваш вставленный код трудно читать и понимать, самая простая причина вашей проблемы находится в этом фрагменте:

const all = document.getElementsByClassName('react-grid-Row') as 
HTMLCollectionOf<HTMLElement>;
debugger; if (row.revision > selectRevison) {
 for (let i = this.state.fromRow; i <= this.state.toRow; i++) {
      all[i].style.color = 'red';   //HERE
}

По сути, здесь есть несколько вещей, которые могут пойти не так, но, скорее всего, на странице либо нет строк с этим классом, либо меньше, чем у вашего this.state.fromRow, я вижу, у вас есть отладчик, но вам не хватает нескольких вещей:

  1. Вы не делаете нулевую проверку all, чтобы убедиться, что вы что-то нашли.
  2. Вы не проверяете, действительно ли all.length > this.state.fromRow
  3. Вы не нарушаете цикл for, если all.length < this.state.toRow

Это не удается, потому что all[i] не существует или нет значений:

all = [0, 1]

и вы ищете все [3] например

Добавьте эти резервные варианты и проверьте, какой all находится при загрузке страницы, и вы сможете это выяснить.

Это не удается, потому что все [i] не существует или нет значений: да, вы правы, но как я могу решить эту проблему. я не знаю

Mustafa 19.09.2018 10:20

Убедитесь, что у вас есть правильные элементы с именем класса «react-grid-Row» на странице ... если нет, вам нужно добавить их, в противном случае проверьте, что у вас достаточно для удовлетворения требований. Если это дало ответ на ваш вопрос, поставьте галочку :)

Tom Rowe 20.09.2018 02:50

Другие вопросы по теме