Использование styled-components в Gatsby
Development, Java | Комментировать запись
При создании нового проекта Gatsby.js предоставляет несколько вариантов стилизации. Можно написать собственные таблицы стилей CSS/SCSS, установить фреймворки типа Bootstrap и/или использовать различные решения CSS-in-JS. Библиотека styled-components – одно из самых популярных решений CSS-in-JSS, и это неспроста. Это мощный, простой в освоении инструмент, который безупречно работает с Gatsby. В этом мануале мы посмотрим, как добавить библиотеку в свой проект.
В данном руководстве предполагается, что у вас уже есть рабочий проект Gatsby.js, который вы можете отредактировать. Если вам нужна помощь в создании такого проекта, обратитесь к статье Gatsby v2: с чего начать работу?
1: Установка styled-components
Установка библиотеки styled-components в наш проект Gatsby – чрезвычайно простой процесс, который состоит из двух этапов.
Установка зависимостей
Для начала нам просто нужно установить три обязательных зависимости от npm:
- styled-components: основной фреймворк стилизованных компонентов, который представляет собой очень гибкое средство CSS-in-JS, разработанное для React. Он автоматически обрабатывает SSR, автоматически вставляет префиксы и умеет многое другое. Ознакомиться с официальной документацией библиотеки вы можете здесь.
- gatsby-plugin-styled-components: официальный плагин Gatsby.js для стилизованных компонентов.
- babel-plugin-styled-components: плагин для Babel, который предоставляет более четкие имена классов, возможность рендеринга на серверной стороне, уменьшает размеры пакетов и делает многое другое. Gatsby зависит от этого плагина, но нам не нужно вручную редактировать файл .babelrc.
Давайте перейдем в корневой каталог проекта и запустим в командной строке следующее:
$ yarn add styled-components gatsby-plugin-styled-components babel-plugin-styled-components
Примечание: Все плагины можно установить с помощью npm, если вы предпочитаете использовать этот инструмент.
Добавление плагина в конфигурацию Gatsby
На втором этапе установки мы должны добавить плагин в конфигурацию Gatsby. Давайте поместим его в массив plugins в файле gatsby-config.js нашего проекта.
module.exports = {
...
plugins: [
{
resolve: `gatsby-plugin-styled-components`,
options: {
// Change plugin default options here, e.g.:
// ssr: false
// displayName: false,
// minify: false
},
},
//... other plugins
]
}
Здесь есть несколько опций для переопределения настроек по умолчанию (среди которых отключение минификации или рендеринга на стороне сервера). Их полный список и описание можно найти здесь, в документации.
Если вы не планируете настраивать параметры плагина, можно использовать более быстрый однострочный вариант:
module.exports = {
...
plugins: [
`gatsby-plugin-styled-components`,
//... other plugins
]
}
Вот и все! Библиотека styled-components теперь установлена и готова к работе в нашем проекте Gatsby.
2: Использование библиотеки styled-components
Этот пост не является подробным уроком по использованию данной библиотеки – иначе он был бы длиннее в несколько раз. Здесь мы рассмотрим несколько быстрых примеров, которые хорошо продемонстрируют преимущества styled-components в Gatsby.
Создание новой страницы
Чтобы упростить задачу, давайте сначала создадим базовую демо-страницу, которая будет храниться в /src/pages/sc-demo.js.
import React from 'react';
import { Link, graphql } from 'gatsby';
import Helmet from 'react-helmet';
import Layout from '../components/layout';
class SCDemoPage extends React.Component {
render() {
const siteData = this.props.data.site.siteMetadata;
const siteTitle = siteData.title;
const siteDescription = siteData.description;
return (
<Layout location={this.props.location}>
<Helmet
htmlAttributes={{ lang: 'en' }}
meta={[{
name: 'description',
content: siteDescription
}]}
title={siteTitle}
/>
<section>
<h2>Styled Components Demo</h2>
<div>
<h3>Banana Milkshakes</h3>
<p>We'll definitely need frozen bananas
and some milk.</p>
<Link to='/'>To Homepage</Link>
</div>
</section>
</Layout>
)
}
};
export default SCDemoPage;
export const pageQuery = graphql`
query {
site {
siteMetadata {
title
description
}
}
}
`;
Импорт и использование styled-components
Сейчас мы попробуем добавить несколько простых стилей в наш div Banana Milkshakes. Во-первых, мы импортируем styled-components в начале страницы, сразу после импорта Helmet:
import React from 'react';
import { Link, graphql } from 'gatsby';
import Helmet from 'react-helmet';
import styled from "styled-components"; // yay!
Затем прямо под импортом Layout мы создадим два стилизованных компонента. Первый компонент мы создадим для CustomBox, он будет применять стиль к HTML-элементу div.
Примечание: Обратите внимание на SASS-подобную вложенность.
const CustomBox = styled.div`
border: 1px solid rgb(0, 143, 104);
padding: 20px;
h3 {
color: rgb(109, 182, 91);
margin: 0 0 10px;
padding: 0;
}
`
Читайте также: Навигация по страницам в Gatsby
Второй компонент применит стили к компоненту Link. Этот пример демонстрирует, что вы можете стилизовать практически любой компонент, а не только элементы HTML. Например, его можно использовать для настройки компонентов react-bootstrap.
const StyledLink = styled(Link)` color: red; `
Важно: Обратите внимание на использование шаблонных литералов в обоих примерах выше.
Использование новых компонентов внутри страницы
Теперь мы можем применить наши новые компоненты. Во-первых, давайте заменим простой тег div, в который взята информация Banana Milkshakes, новым тегом CustomBox. Во-вторых, нам будет нужно заменить тег Link тегом StyledLink.
Вот как будет выглядеть код в результате:
<CustomBox> <h3>Banana Milkshakes</h3> <p>We'll definitely need frozen bananas and some milk.</p> <StyledLink to="/">To Homepage</StyledLink> </CustomBox>
Вот и все! Если ваш сайт Gatsby еще запущен в режиме разработки, вы увидите, что стили обновятся сразу после сохранения файла.
Заключение
Добавить стилизованные компоненты в проект Gatsby.js совсем несложно. При этом библиотека styled-components может изменить очень многое. Этот простой мануал затрагивает лишь основы работы с ней, поэтому рекомендуем вам открыть документацию по styled-components, чтобы глубже изучить ее удивительные возможности.
Tags: CSS-in-JS, Gatsby, React