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, и я не знаю, в чем проблема. Спасибо за ваши отзывы, ребята.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итак, без остального контекста, потому что ваш вставленный код трудно читать и понимать, самая простая причина вашей проблемы находится в этом фрагменте:
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, я вижу, у вас есть отладчик, но вам не хватает нескольких вещей:
all, чтобы убедиться, что вы что-то нашли.all.length > this.state.fromRowall.length < this.state.toRowЭто не удается, потому что all[i] не существует или нет значений:
all = [0, 1]
и вы ищете все [3] например
Добавьте эти резервные варианты и проверьте, какой all находится при загрузке страницы, и вы сможете это выяснить.
Убедитесь, что у вас есть правильные элементы с именем класса «react-grid-Row» на странице ... если нет, вам нужно добавить их, в противном случае проверьте, что у вас достаточно для удовлетворения требований. Если это дало ответ на ваш вопрос, поставьте галочку :)
Это не удается, потому что все [i] не существует или нет значений: да, вы правы, но как я могу решить эту проблему. я не знаю