Зачем нужен стилизованный компонент в React

RedDeveloper
30.12.2022 13:28
Зачем нужен стилизованный компонент в React

Стилевые компоненты - популярный способ стилизации компонентов React, поскольку они позволяют писать стили CSS в декларативном и модульном виде.

Некоторые преимущества использования стилизованных компонентов включают:

  • Масштабирование: Стили, записанные в стилизованных компонентах, привязаны к компоненту, что означает, что они применяются только к конкретному компоненту и не влияют на остальное приложение. Это помогает предотвратить конфликты между стилями и облегчает понимание стилей, применяемых к определенному компоненту.
  • Разделение проблем: С помощью стилизованных компонентов вы можете держать стили для компонента рядом с его реализацией, что может облегчить понимание и сопровождение кода. Это также может помочь улучшить разделение проблем между представлением и логикой компонента.
  • Возможность повторного использования: Стилизованные компоненты могут быть легко использованы повторно во всем приложении, что позволяет сократить объем кода, который необходимо писать и поддерживать.
  • Динамическая стилизация: Стилизованные компоненты позволяют динамически изменять стиль компонента на основе реквизитов или состояния, что может быть полезно при создании отзывчивых или интерактивных компонентов.
  • Совместимость с React: Стилизованные компоненты построены поверх React и полностью совместимы с экосистемой React, что облегчает их использование с другими библиотеками и инструментами React.

В целом, стилизованные компоненты могут помочь улучшить опыт разработки и сопровождаемость React-приложения.

Введение

Styled Components - это библиотека для React, которая позволяет использовать подход CSS-in-JS для стилизации компонентов. Она позволяет вам писать фактический CSS-код для стилизации ваших компонентов, но таким образом, чтобы он был привязан к конкретному компоненту и не был глобальным. Это может быть полезно по ряду причин, в том числе:

  1. Это помогает предотвратить конфликты глобальных стилей друг с другом, поскольку каждый компонент имеет свой собственный изолированный стиль.
  2. Это позволяет использовать все возможности CSS, включая медиа-запросы и псевдоселекторы, для стилизации компонентов.
  3. Это может облегчить рассуждения о стилях, так как они находятся вместе с компонентом, для которого они стилизуются.

Чтобы использовать Styled Components в проекте React, вам необходимо установить его в качестве зависимости. Это можно сделать, выполнив следующую команду:

npm install styled-components

Затем, чтобы использовать Styled Components в своем проекте, вы можете импортировать функцию styled из библиотеки styled-components и использовать ее для создания стилизованного компонента. Вот пример того, как это можно использовать:

import React from 'react';
import styled from 'styled-components';

const Button = styled.button`
  background-color: red;
  color: white;
  font-size: 16px;
  padding: 8px 16px;
  border: none;
  border-radius: 4px;
`;
function App() {
  return (
    <Button>Click me!</Button>
  );
}

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

Расширенные стили в компонентах

Довольно часто вы можете захотеть использовать компонент, но слегка изменить его для одного случая. Теперь вы можете передать интерполированную функцию и изменить их на основе некоторых реквизитов, но это довольно много усилий для однократного переопределения стилей.

Чтобы легко создать новый компонент, наследующий стилистику другого, просто оберните его в конструктор styled(). Здесь мы используем кнопку из предыдущего раздела и создадим специальную кнопку, дополнив ее стилем, связанным с цветом:

// The Button from the last section without the interpolations
const Button = styled.button`
  color: palevioletred;
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid palevioletred;
  border-radius: 3px;
`;

// A new component based on Button, but with some override styles
const TomatoButton = styled(Button)`
  color: tomato;
  border-color: tomato;
`;

render(
  <div>
    <Button>Normal Button</Button>
    <TomatoButton>Tomato Button</TomatoButton>
  </div>
);

Использование псевдостилей в стилизованных компонентах

export const FancyButton = styled(StyledButton)`
  border: none;
  color: royalblue;
  &:hover {
    cursor: pointer;
    border: 2px solid palevioletred;
  }
`;

В приведенном выше коде компонент FancyButton ( styled ) расширяет компонент StyledButton и добавляет к нему псевдокласс.

Использование компонентов в качестве полиморфных реквизитов

Иногда в react мы хотим использовать кнопку как якорный тег, это понятие известно как полиморфный реквизит в стилизованных компонентах и может быть сделано с помощью as prop:

<FancyButton as="a">Button</FancyButton>

Передача Html-атрибута стилизованным компонентам:

Чтобы передать реквизиты стилизованному компоненту, можно использовать метод attrs из библиотеки styled-components. Метод attrs позволяет устанавливать атрибуты базового DOM-элемента стилизованного компонента на основе переданных ему реквизитов.

Вот пример того, как можно использовать метод attrs для установки атрибута href элемента якоря на основе реквизита to:

import styled from 'styled-components';
const Link = styled.a.attrs(props => ({
  href: props.to,
}))`
  /* Style for the Link component */
`;

Затем вы можете использовать компонент Link следующим образом:

<Link to="/home">Home</Link>

Метод attrs также можно использовать для установки других атрибутов, таких как id, className, title и т.д., на основе реквизитов, переданных компоненту.

const Button = styled.button.attrs(props => ({
  type: props.type || 'button',
  className: props.primary ? 'primary' : 'secondary',
}))`
  /* Style for the Button component */
`;
<Button type="submit" primary>
  Submit
</Button>

В этом примере атрибут type будет установлен на submit, а атрибут className будет установлен на primary, когда компонент Button будет отображен.

Диаграмма компиляции со стилизованными компонентами

Следующая → Стилизованные компоненты с TS (скоро...)

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.