HTMLCollection [] не определено

rowGetter = i => {
    const row = this.state.estimateItemList[i];
    const selectRevison = this.state.selectedEstimate.revision;
    const rowLenght = this.state.estimateItemList.length;
    const changeColor = document.getElementsByClassName('rd') as 
    HTMLCollectionOf<HTMLElement>;
    if (row.revision > selectRevison) {
        for (let x = 0; x < changeColor.length; x++) {
            row.changeColor.style.backgroundColor = 'red';
            // changeColor.style.backgroundColor = 'red'; //this is get error(Cannot read property 'style' of undefined)
        }
        return row;
    }
}

Я хочу изменить цвет строки, когда выполняется условие row.revision > this.state.selectedEstimate.revision. Как можно предотвратить смену this.color. Однако я не получаю никаких ошибок, но цвет строки не меняется, и changeColor : HTMLCollection [] не получает никаких элементов. это всегда undefined. Как я могу решить эту проблему?

Вы неправильно обращаетесь к changeColor, т.е. вы не используете ключ / индекс

Patrick Evans 19.09.2018 20:55

Без сопроводительного HTML мы не сможем вам помочь. Что-то мне подсказывает, что ваш селектор неправильный.

Adam H 19.09.2018 20:55

что ты имеешь в виду, братан с сопроводительным HTML? что мне добавить?

Mustafa 19.09.2018 20:59

@PatrickEvans, пожалуйста, приведите мне небольшой пример. Я новичок в React

Mustafa 19.09.2018 21:02

Что должен делать const changeColor = document.getElementsByClassName('rd') as HTMLCollectionOf<HTMLElement>? document.getElementsByClassName возвращает NodeList, так почему бы не использовать Array.from(document.getElementsByClassName...), а затем просто выполнить итерацию с использованием .forEach (или сопоставить с помощью .map), как любой другой массив?

Mike 'Pomax' Kamermans 19.09.2018 21:03

@ Mike'Pomax'Kamermans благодарит тебя за ответ, братан. HTMLCollection уже является массивом? и, пожалуйста, дайте мне немного. для каждого примера. больше нет массива.

Mustafa 19.09.2018 21:08

NodeList, HTMLCollection - это объекты, подобные массиву (не имеют ничего общего с реакцией). Это означает, что вы обращаетесь к ним как к массиву, то есть changeColor[x]

Patrick Evans 19.09.2018 21:19

@PatrickEvans, что я могу сделать, братан изменить список массивов на массив объектов?

Mustafa 19.09.2018 21:26

Это абсолютно не массивы. NodeList и HTMLCollection - это списки жить, что означает, что если ваш документ изменяется, они меняются вместе с ним. Таким образом, они могут измениться, пока вы их перебираете, который может сломать все, что угодно. Поэтому перед повторением вам нужно получить стабильный список, для которого вы используете Array.from(). Но с учетом всего сказанного: зачем вы вообще запрашиваете DOM? Если вы реагируете, ваша DOM - это результат вашего кода реакции, поэтому идея состоит в том, чтобы манипулировать / проверять все на стороне реакции.

Mike 'Pomax' Kamermans 19.09.2018 22:14

@ Mike'Pomax'Kamermans спасибо за ваш ответ, братан, я использовал const changeColor = Array.from(document.getElementsByClassName("rd") as HTMLCollectionOf<HTMLElement>);, но все равно changeColor [] ничего не получил, он все еще пуст

Mustafa 19.09.2018 22:30

Я бы по-прежнему рекомендовал «не получать доступ к DOM». Эта информация уже должна быть полностью доступна на стороне React. Также в качестве небольшого совета, более связанного с кодекс поведения: постарайтесь воздержаться от звонков людям братан. Приличное количество людей сочтут это оскорбительным (и на то есть веские причины, учитывая то, с чем это слово ассоциируется в североамериканской культуре).

Mike 'Pomax' Kamermans 19.09.2018 22:53
Поведение ключевого слова "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
11
588
1

Ответы 1

Не могли бы вы попробовать это:

const changeColor = document.getElementsByClassName ('rd');

вместо того :

const changeColor = document.getElementsByClassName ('rd') как HTMLCollectionOf;

[ts] Для универсального типа 'HTMLCollectionOf <T>' требуется 1 аргумент (ы) типа. я получаю эту ошибку

Mustafa 19.09.2018 21:11

Убедитесь, что страница имеет имя класса "rd"

Eitbiz 19.09.2018 21:12

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