Как задать стили за пределами стилизованного компонента?

#css #reactjs #sass #styled-components

Вопрос:

Я уверен, что есть способ решить эту проблему, но я не могу его найти. У меня есть компонент react GenericList , который представляет собой список с функциями CRUD. У него есть своя Popup внутренняя сторона.

 <GenericList
  popupContent={(
    <CharterPeriodsPopup
      charter={charter}
    />
  )}
 

А вот код внутри GenericList

 <Popup
  bodyClassName={this.props.bodyClassName}
  contentClassName={this.props.contentClassName}
  title={title}
  {...this.props.popupProps}
>
  {!popupContent ? '$popupContent': (
           cloneElement(this.props.popupContent, {...popupProps}))}
</Popup>
 

Я хочу получить доступ к всплывающему окну внутри общего списка и задать для него стили с помощью стилизованных компонентов. Но у меня нет прямого доступа к нему.

Посмотрите на экран, который я загрузил. введите описание изображения здесь

Мне нужен доступ к всплывающему телу. С помощью SCSS мы можем просто задать имена классов и импортировать их в компонент react, и это будет работать. Но в случае со стилизованными компонентами у нас есть определенная область, которая относится только к стилизованной компонентной части. Я создал стилизованный компонент для CharterPeriodsPopup.

Ответ №1:

Из документов:

Интеграция существующего фреймворка CSS со стилизованными компонентами действительно проста! Вы можете использовать существующие имена классов вместе с вашими компонентами.

Например, представьте, что у вас есть существующее приложение с двумя классами, которые вы хотите использовать снова: .small и .big . Если вы хотите, чтобы класс всегда был прикреплен к компоненту, вам следует использовать метод attrs для его прикрепления. Если вы хотите прикрепить его только в некоторых случаях, вы можете использовать реквизит имени класса, как и всегда!

 // Using .attrs, we attach the .small class to every <Button />
const Button = styled.button.attrs(props => ({
  className: "small",
}))`
  background: black;
  color: white;
  cursor: pointer;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid black;
  border-radius: 3px;
`;

render(
  <div>
    <Button>Styled Components</Button>
    {/* Here we attach the class .big to this specific instance of the Button */}
    <Button className="big">The new way to style components!</Button>
  </div>
);
 

Комментарии:

1. Это не имеет отношения к моему вопросу. Я просто хочу получить доступ к имени класса за пределами области действия стилизованного компонента.

2. Упс, я неправильно понял. После повторного чтения вам нужен доступ к элементу во время выполнения? Если да, то почему бы не использовать React ref для доступа к необработанному элементу DOM (к элементу, который вы хотели бы предоставить)?

3. Оттуда, если вам нужно имя класса, вы можете получить к нему доступ через domRef.current.classList . Однако, может быть, вам просто нужно было имя класса для запроса элемента DOM? Если это так, то React refs полностью решает этот вариант использования идиоматическим способом.