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

Рассмотрим, как можно реализовать темную тему с помощью React и styled-components. Итак, начинаем!

Настройка проекта

Собираясь создать очень простую функциональность темного режима мы будем использовать инструмент create-react-app. Для начала надо с помощью этого инструмента определить проект React.

Затем перейдите в каталог проекта, откройте терминал и установите пакет styled-components, используя следующую команду:

npm install styled-components

Если вы используете Yarn, то можно ввести следующую команду:

yarn add styled-components

После установки пакета можно будет без каких-либо проблем импортировать styled-componens в свой код.

Код проекта

Вначале нужно создать файл для темной и светлой тем. Также установим некоторые глобальные стили внутри этого файла, используя styled-components.

Назовем этот файл theme.js, он будет содержать два объекта со свойствами темной и светлой темы. Помимо этого будем использовать props в styled-components для изменения цвета и фона в зависимости от используемой темы (темная/светлая).

Пример кода:

//theme.js

import {createGlobalStyle} from "styled-components"export const darkTheme = {
  body: "#000",
  textColor: "#fff",
  headingColor: "lightblue"
}

export const lightTheme = {
  body: "#fff",
  textColor: "#000",
  headingColor: "#d23669"
}

export const GlobalStyles = createGlobalStyle`
 body {
  background: ${props => props.theme.body};
  color: ${props => props.theme.textColor};
  transition: .3s ease;
 }
 h2{
   color: ${props => props.theme.headingColor};
 }
`

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

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

Пример кода:

//App.js

import React, { useState } from "react";
import "./styles.css";
import { ThemeProvider } from "styled-components";
import { darkTheme, lightTheme, GlobalStyles } from "./theme";

function App() {
  const [theme, setTheme] = useState("light");

const switchTheme = () => {
    theme === "light" ? setTheme("dark") : setTheme("light");
  };

return (
    <ThemeProvider theme={theme === "light" ? lightTheme : darkTheme}>
      <GlobalStyles />
      <div className="App">
        <h1>Hello bro!</h1>
        <button onClick={switchTheme}>Switch Theme</button>
      </div>
    </ThemeProvider>
  );
}
export default App;

Исходя из приведенных примеров, переключаться между темами можно в зависимости от состояния. Мы импортировали поставщика тем из styled-components, чтобы предоставлять соответствующую значению состояния тему для приложения. Теперь можно переключаться между темной и светлой темами после нажатия на кнопку.

Практический механизм, включая исходный код, можно проверить в CodeSandbox.

Заключение

Как видим, реализовать переключение тем с помощью styled-components просто. При желании можно создать даже сложные темы. Например, на странице для каждого режима можно переключаться между темными и светлыми темами с разными цветами.

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Mehdi Aoussiad: Implementing The Dark Mode Using React and Styled Components

Предыдущая статьяКак с With() улучшить написание кода на Swift
Следующая статья6 супер команд терминала, или как стать мастером продуктивности