#reactjs #styled-components
Вопрос:
Я не нашел четкого способа разбить гигантский глобальный стиль на файлы меньшего размера, которые в идеале я мог бы объединить в единый глобальный стиль.
Это достаточно легко сделать, когда вы просто интерполируете, но нужно/нужно сохранить доступ к theme
контексту глобального стиля, чтобы цвета можно было применять динамически.
Возможно ли это?
Пример
import css from 'styled-components'
export const thirdp_pace = css`
.pace .pace-progress {
background: ${({ theme }) =>theme.primary};
height: 4px;
}
`
import { createGlobalStyle } from 'styled-components';
export const GlobalStyles = createGlobalStyle`
:focus {
outline: none !important;
}
${thirdp_pace}
`
Это своего рода идея, к которой я хотел бы подойти, но она не работает, потому thirdp_pace
что у меня нет доступа theme
. И я понимаю, почему, я использую это только в качестве примера. Цель состоит в том, чтобы разбить гигантский глобальный стиль на более мелкие, размером с укус.
В идеале мы бы перенесли большую часть информации о стиле в их отдельные компоненты, но, к сожалению, это гораздо более сложная задача.
Комментарии:
1. Как насчет настройки статического объекта в качестве темы, которую вы затем экспортируете / импортируете, вместо того, чтобы передавать ее через контекст в качестве реквизита? В любом случае, по какой причине он был установлен в магазине?
2. Я не уверен, что понимаю ваш вопрос (я не уверен, о каком магазине вы говорите).
theme
Объект отображается в областиcreateGlobalStyle
и является одним из нескольких объектов , которые по сути являются просто цветовыми отображениями, которые могут быть применены на лету, поэтому я не могу просто выбрать один объект темы.3. Взгляните на: codesandbox.io/s/styled-components-theme-3x6o0 — Я включил не только цвета, но и все возможные переменные, которые вам понадобятся для обеспечения согласованности в вашем приложении. Сделано на основе материала-пользовательский интерфейс: material-ui.com/customization/default-theme/#default-theme
4. Затем вы можете разбить свою тему на другой файл и экспортировать / импортировать ее там, где вам это нужно — лично мне нравится хранить все глобальные стили в одном файле, хотя я нахожу его немного более организованным, но на самом деле это просто личные предпочтения
5. То, что вы описываете / показываете здесь, в значительной степени то, что я делаю. Мой вопрос заключается в том, чтобы разбить фрагменты глобального стиля на отдельные объекты, которые будут включены, гарантируя сохранение доступа к объекту темы. Смотрите пример, который я привел. Мне не хватает этой идеи в вашей ссылке codesandbox?
Ответ №1:
Решение: Не используйте css
— просто верните нужную строку CSS и вызовите функцию
export function thirdp_pace(theme) {
return `
.pace .pace-progress {
background: ${theme.primary};
height: 4px;
}
`
}
Затем
import {thirdp_pace} from './styled-components/thirdparty-overrides/pace'
export const GlobalStyles = createGlobalStyle`
${
({theme}) => thirdp_pace(theme)
}
`