DOM-манипуляции с элементами вне компонента React

Я сделал недопустимую боковую панель в 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%';
    }
  }
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
322
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме