HTMLCollection в componentDidMount пустой

125
23 февраля 2021, 11:10

Необходимо поместить в React-компонент HTML полученный извне и произвести с ним ряд манипуляций (навесить обработчики на ссылки). Для этого сделан простой компонент (см. ниже). Само навешивание обработчиков для простоты удалил из примера. Проблема в том, что при печати в консоль будет непустой HTMLCollection link но всегда нулевая длина link.length. Это признак того что в DOM элементы еще не помещены. Но по идее componentDidMount вызывается после рендеринга компонента и все уже должно быть в DOM. В итоге навесить обработчики не получается. Почему так происходит и каким образом навесить-таки обработчики?

class HTML extends React.Component {
  componentDidMount() {
    var root = document.getElementById(this.props.id);
    var link = root.getElementsByTagName('a');
    console.dir(link); // several elements here
    console.log('LENGTH: ' + link.length); // but length always 0
  }
  render() {
    return (  
      <div id={this.props.id} className='html' dangerouslySetInnerHTML={{__html: this.props.data}} />
    );
  }
}
Answer 1

После рытья документации и экспериментов переписал все на использование Callback Refs С этим механизмом все заработало.

READ ALSO
Slick Slider не переключает слайды, если их мало

Slick Slider не переключает слайды, если их мало

На сайте есть Slick Slider с функцией Slider Syncing, то есть, когда два слайдера синхронизированные и при переключении слайдов одного из них, переключаются...

91
Баг при получении координат через e.offsetX

Баг при получении координат через e.offsetX

Хочу чтобы координаты определялись относительно моего контейнера, но при подставлении в формулу eoffsetX, каждый второй тик элемент отправляется...

105
textarea auto height js

textarea auto height js

Подскажите пожалуйста, как добиться изменения height textarea на auto в зависимости от контентаПри нажатии на open должен быть виден весь текст, который...

105
Отложенная конструкция членов класса

Отложенная конструкция членов класса

Есть C++ класс такого видаУ него есть приватное поле window

115