@webe
frontend

Как наследовать стили в Styled Components?

Как наследовать стили в Styled Components?
Нужно взять мой react-компонент и подменить в нем некотрые стили.

import MyInput from '../components/Input';

Импортирую react компанент MyInput, внутри него я стилизовал все с помощью Styled Components.
Если рендерить, то все ок, но я хочу подменить в нем пару стилей,
как это сделать с помощью Styled COmponents подскажите плиз.

const EnchantedInput = styled.MyInput`
  border: 3px solid red;
`;


const EnchantedInput = MyInput.extend`
  border: 3px solid red;
`;


const EnchantedInput = styled(TextInput)`
  &&& {
    color: palevioletred;
    font-weight: bold;
    border: 10px solid red;
  }
`;

Эти варианты не работают :(

Либо я что-то не так делаю... может кто объяснить разницу между этими 3-мя примерами?
Возможно это не реально добится в styled Components и нужно использовать High Order Component ?
Еще вижу вариант навесить Style = {{}} ...
  • Вопрос задан
  • 5068 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Если хотите изменить стили React.Component надо передавать методе render свойство className. Так же можно вынести все элементы компонента в статические поля, чтобы позже переопределять их стили.
const Wrapper = styled.div`
  // some styles
`;

const ChildElement = styled.div`
  // some styles
`;

class MyComponent extends React.Component {
  static ChildElement = ChildElement;
  
  render() {
    const { className } = this.props;

    return (
      <Wrapper className={className}>
        <ChildElement>Some text</ChildElement>
      </Wrapper>
    )
  }
}

export default MyComponent;


const SyledMyComponent = styled(MyComponent)`
  // some styles

  ${MyComponent.ChildElement} {
    // some styles for ChildElement
  }
`;


Метод extend работает только со StyledComponent:
const AbstractElement = styled.div`
  // some styles
`;

const ConcreteElement = AbstractElement.extend`
  // some styles
`;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@daima
Что-то я ничерта не понял. Нельзя ли написать попроще, применительно к хотелке автора?
вот он импортировал
import MyInput from '../components/Input';
Теперь надо подмешать стили
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы