Я сделал недопустимую боковую панель в React, но внутри компонента боковой панели i и сделал вызов документа для классов, которые не находятся внутри компонента. Я хотел знать, можно ли выполнять вызовы документов для классов, находящихся за пределами компонента. Если это не лучшая альтернатива?
if (this.state.sideBarOpen === false) {
for (let i = 0; i < document.getElementsByClassName('u-session-width').length; i++) {
document.getElementsByClassName('u-session-width')[i].style.width = 'calc(100vw - 59rem)';
}
} else {
for (let i = 0; i < document.getElementsByClassName('u-session-width').length; i++) {
document.getElementsByClassName('u-session-width')[i].style.width = '98%';
}
}





Если вы не можете использовать React для рендеринга остальной части страницы, я не знаю ни одного более чистого API для выполнения того, что вам нужно.
Я бы предложил отделить эти побочные эффекты от самого компонента: например, вы могли бы добавить два реквизита обратного вызова, называемые onHide и onShow, которые вызываются при изменении состояния компонента, а затем поместить в них код, который управляет DOM.
if (this.state.sideBarOpen === false) {
this.props.onHide();
} else {
this.props.onShow();
}
И где вы визуализируете компонент:
const setSessionWidth = (width) => {
for (let i = 0; i < document.getElementsByClassName('u-session-width').length; i++) {
document.getElementsByClassName('u-session-width')[i].style.width = width;
}
};
<Sidebar
...
onShow = {() => setSessionWidth('calc(100vw - 59rem)')}
onHide = {() => setSessionWidth('98%')}
/>