Недавно я строил сборник для моего нового проекта. Хотя я наслаждаюсь инкапсуляцией, она обеспечивает, глобальные стили, такие как сбрасы, все еще важны. Несмотря на то, что он не сильно меняется, я все еще хотел, чтобы они были в моей любой истории.
Глобальный сброс
Мои глобальные стили созданы, используя Стиль-перезагрузка дополнение к Слифовые компоненты Отказ Это настраиваемый сброс нагрузки – то, что я искал довольно некоторое время.
Сам код выглядит довольно просто:
import { createGlobalStyle } from "styled-components"; import reboot from "styled-reboot"; import design from "./"; const options = { bodyColor: design.brand("violet"), bodyBg: design.brand("white"), fontSizeBase: "8px", linkColor: design.brand("base"), linkHoverColor: design.brand("base"), }; const GlobalStyle = createGlobalStyle` ${reboot(options)} `; export default GlobalStyle;
Это дает нам компонент, который мы можем разместить подобное друг другу. Например , так:
import GlobalStyle from "../globalStyle"; const App = () => (); Hello
Отличные вещи, но Как я могу использовать его в моих историях?
Статья книги
Я использую Desearbook в качестве моей главной среды для разработки UI. Так что очевидно, что я хочу, чтобы это было максимально отразить фактический результат. Включение глобального сброса является обязательным здесь.
Мой первый подход был просто добавить
Компонент к каждой истории, как это:
storiesOf("UI", module) .add("Button", () => ());
Хотя это, безусловно, работает, это дает мне дополнительные накладные расходы. Я должен помнить, чтобы включить сброс, импортировать его каждый раз и т. Д.
Я слишком ленивый для этого. Я должен был понять что-то лучшее.
Тогда я вспомнил Декораторы Вариант рассказывает книгу!
Декораторы являются компонентами обертки или декораторы с рассказами, которые обертывают историю.
Итак, написание такого декоратора – единственное, что осталось.
Написание декоратора
Весь дополнительный код для съемника лежит в … config.js Файл, в основном в
.storybook каталог (если не указан иначе). Мой выглядел так:
import { configure } from '@storybook/react'; const req = require.context('../../', true, /\.stories\.tsx$/); function loadStories() { req.keys().forEach(filename => req(filename)) } configure(loadStories, module);
Простое сканирование для историй. Итак, следующая вещь – добавить декоратор.
import { addDecorator, configure } from '@storybook/react'; import * as React from 'react'; import GlobalStyle from '.../ui/globalStyle'; const req = require.context('../../', true, /\.stories\.tsx$/); function loadStories() { req.keys().forEach(filename => req(filename)) } const withGlobal = (cb) => (); addDecorator(withGlobal); configure(loadStories, module); {cb()}
Давайте поговорим об этом.
Во-первых, мы импортируем Adddecorator
Функция, она будет нести ответственность за применение нашего дополнения к системе.
Во-вторых, мы импортируем реагирование, так как мы создадим немного JSX, а стиль создан ранее.
Следующий шаг создает сам декоратор. Простая функция с одним аргументом. Я завернул его в Реагировать. Фрагмент
который позволяет использовать несколько детей без создания дополнительных элементов DOM. Если вы используете реагирование в версии ниже 16, рассмотрим Div
как нейтральная обертка.
Последний шаг – применить декоратор, используя Adddecorator
Отказ
Просто как тот. Что такое супер важно, это объявить Настроить
выполнение как последняя команда.
Теперь дополнительный код CSS будет добавлен в каждую из ваших источников без каких-либо дополнительных изменений.
Оригинал: “https://dev.to/tomekbuszewski/default-styles-in-storybook-with-styled-components-58dp”