Вы вызываете disableState()
в конструкторе, когда DOM компонента еще не готов, поэтому:
this.btn = document.querySelector('.minus');
равно null
.
Если вы переместитесь что логика c в firstUpdated()
, то он должен работать.
firstUpdated() {
disableState();
}
disableState() {
// Also, consider querySelecting inside this.renderRoot
// to avoid picking elements with the same class in
// other parts of the document
this.btn = this.renderRoot.querySelector('.minus');
// ...
}
Обратите внимание, что вы можете сделать то же самое в более декларативном виде, без необходимости выбрав элемент:
render() {
return html`
<div class="counter">
<a class="counter__btn minus ${this.numPassengers === 0 ? 'counter__btn--disable' : ''}" href="#"></a>
<span class="counter__label">${this.numPassengers}</span>
<a class="counter__btn" href="#"></a>
</div>
`;
}
или используя директиву lit-html
classMap
:
import {classMap} from 'lit-html/directives/class-map.js';
// ...
render() {
return html`
<div class="counter">
<a class=${classMap({
counter__btn: true,
minus: true,
'counter__btn--disable': this.numPassengers === 0,
})} href="#"></a>
<span class="counter__label">${this.numPassengers}</span>
<a class="counter__btn" href="#"></a>
</div>
`;
}