Время от времени я сталкивался с проблемой, заключающейся в том, что некоторые хуки или слушатели выполняются за до , элементы отображаются и доступны в дереве DOM (вызывается функция рендеринга). Это может привести к прекращению действия JavaScript для остановки приложения. Бьюсь об заклад, именно поэтому вы получаете эту ошибку. Так что простого условия if должно быть достаточно, например:
@Listen('scroll', { target: 'window' })
handleScroll(ev) {
var newsContainer= document.querySelector(".newsContainer");
if(newsContainer && newsContainer.classList){
newsContainer.classList.remove("transparentBackground");
newsContainer.classList.add("darkBackground");
}
}
Я бы сделал go шаг вперед и использовал бы ссылки, поскольку я думаю, что это выглядит немного яснее и обладает очарованием того, что вы независимы от classNames. и вы можете получить доступ к элементу из каждого метода и немного проще проверить:
export class NewsContainer{
private element;
@Listen('scroll', { target: 'window' })
handleScroll(ev) {
if(!this.element) return;
this.element.classList.remove("transparentBackground");
this.element.classList.add("darkBackground");
}
render(){
return [
<div ref={(el) => {this.element = el}} class="newsContainer transparentBackground">Content</div>
]
}
}
Вы можете использовать this.element
, который относится к вашему элементу div.