Если вы не можете использовать 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%')}
/>