Могу ли я создавать компоненты в стиле React на основе классов?

Я только начал изучать использование стилизованных компонентов для веб-приложения JavaScript React, и мне интересно, можно ли использовать стилизованные компоненты на основе классов. Например:

Функционал (работает):

import styled from 'styled-components';

const Header = styled.header`
    color: blue;
`;

export default Header;

.
.
.

(in another file)
import React, {Component} from 'react';
import Header from './Header';

class App extends Component {
  render() {
    return (
        <Header>
          This is my header.
        </Header>
    );
  }
}

На основе классов (мне было бы интересно, можно ли что-то подобное сделать - не работает ... цвет не применяется к моему заголовку):

import React, {Component} from 'react';
import styled from 'styled-components';

class Header extends Component {
    render() {
        return (
            <header>
                Hi there. Test.
            </header>
    )};
}

export default styled(Header)`
  color: blue;
`;

.
.
.

(in another file)
import React, {Component} from 'react';
import Header from './Header';

class App extends Component {
  render() {
    return (
        </Header>
    );
  }
}

Возможно ли что-то подобное?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
1 837
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Да, это можно сделать, вам просто нужно передать опору className элементу JSX, который вы хотите иметь класс стилизованного компонента, и на самом деле вы можете передать любые другие реквизиты, так как стилизованные компоненты передают все реквизиты в его упакованный компонент.

import React, {Component} from 'react';
import styled from 'styled-components';

    class Header extends Component {
        render() {
            return (
                <header className = {this.props.className}>
                    Hi there here is another prop {this.props.anotherProp}
                </header>
        )};
    }

    export const StyledHeader styled(Header)`
      color: blue;
    `;

   // you can pass other props down to Header
   <StyledHeader
     anotherProp='testing!!'/>

вы можете увидеть примеры этого паттерна в их документы. Надеюсь, поможет!

Удивительный! Спасибо! Я прочитал ту часть документации, которую вы связали, но меня отбросило, поскольку она написана в функциональной форме (я все еще новичок в React). Будет ли применимо эта часть документов (второй пример ... тот, у которого есть const StyledA = styled(A)``)? Я все же проверил это, и, похоже, он работает так, как я надеялся :)

MuffinTheMan 26.12.2018 03:42

Да, вы можете видеть, что они используют компоненты класса, передав свойство className. С другой стороны, я не использовал интерполяцию компонентов (обязательно буду), но она работает, пока вы нацеливаетесь на стилизованный компонент, а не на компонент React.

Eric Van Der Dijs 26.12.2018 05:15

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