Сегодня мы собираемся использовать ResolveConfig от Tailwind, чтобы написать файл JavaScript, который мы можем использовать с React Context API Чтобы получить доступ к значениям из любой точки приложения.
Мы создадим небольшое приложение и покажем его в действии, переопределив некоторые стили из React Select библиотека.
Настройка
Мы идем с основным Создать приложение React шаблон. Давайте настроим это и установим зависимости на сегодня.
# Create app npx create-react-app tailwind-theme-example # Change into folder cd tailwind-theme-example # Install dependencies yarn add tailwindcss \ react-select \ prettier # Create a bin folder for us to write our JS generation script mkdir bin touch bin/generate-tailwind-theme # Add execution permissions chmod u+x bin/generate-tailwind-theme
Конфигурация ветра
Мы хотим иметь tailwind.config.js
Файл, который можно использовать для расширения по умолчанию. Мы не будем делать с этим слишком много сегодня, но давайте создадим его для использования без нашего сценария позже.
# Setup tailwind config file npx tailwindcss init
Это создаст tailwind.config.js
Файл в корневом каталоге, который выглядит так:
// tailwind.config.js module.exports = { theme: {}, variants: {}, plugins: [], }
Давайте теперь напишем наш скрипт, который будет ссылаться на этот файл.
Обновление нашего скрипта
Внутри Bin/Generate-TailWind-Theme
, обновить файл, чтобы иметь следующее:
#!/usr/bin/env node const fs = require("fs") const resolveConfig = require("tailwindcss/resolveConfig") const prettier = require("prettier") const path = require("path") // bring in the Tailwind config const tailwindConfig = require("../tailwind.config.js") const { theme } = resolveConfig(tailwindConfig) const themeStr = JSON.stringify(theme) const js = ` const theme = ${themeStr} export default theme ` try { // write the file to src/theme.js after // having prettier format the string for us fs.writeFileSync( path.resolve(process.cwd(), "./src/theme.js"), prettier.format(js, { parser: "babel" }), "utf-8" ) } catch (err) { // uh-oh, something happened here! console.log(err.message) }
Здесь мы выполняем эти шаги:
- Используйте
ResolveConfig
от Tailwind до объединения нашей конфигурации и их конфигурации по умолчанию. Мы разрушаемтема
из результата. - Строка
тема
Значение и интерполируйте его в строкеJS
. Эта строка действительна JavaScript. - Написание этого файла в
src/theme.js
После того, как наша красивая библиотека форматирует это.
Теперь мы можем запустить это, используя Bin/Generate-TailWind-Theme
Анкет Если это не сработает, вам может потребоваться проверить, что у вас есть правильные разрешения, а Шебанг (#!) Ссылка на установку узла. Если это не сработает, не стесняйтесь бежать Node Bin/Generate-TailWind-Theme
и посмотрите, что произойдет.
Тема вывода
После успеха короткий взгляд на наш src/theme.js
Файл должен выглядеть следующим образом:
const theme = { screens: { sm: "640px", md: "768px", lg: "1024px", xl: "1280px" }, colors: { transparent: "transparent", current: "currentColor", black: "#000", white: "#fff", gray: { "100": "#f7fafc", "200": "#edf2f7", "300": "#e2e8f0", "400": "#cbd5e0", "500": "#a0aec0", "600": "#718096", "700": "#4a5568", "800": "#2d3748", "900": "#1a202c", }, // ... the rest has been omitted for brevity }, // ... the rest has been omitted for brevity } export default theme
Потрясающий! Теперь у нас есть конфигурация темы, которую мы можем использовать в контексте React.
Настройка поставщика для нашего приложения
Обновите src/app.jsx
Файл, чтобы выглядеть следующим образом:
import React, { createContext } from "react" import theme from "./theme" import { Select } from "./Select" import "./App.css" export const ThemeContext = createContext(theme) function App() { const [select, setSelect] = React.useState() return () } export default App
Themecontext
что мы создали с помощью CreateContext
позволит теме быть доступной с UseContext
зацепите на протяжении всего нашего приложения!
На данный момент наше приложение не будет запущено (мы не создали наш файл select
).
Мы собираемся написать файл адаптера для нашего Выберите
составная часть.
Создайте адаптер выбора
Добавить новый Выберите
Файл компонента.
touch src/Select.jsx
Теперь внутри это src/select.jsx
Файл, добавьте следующее:
import React from "react" import BaseSelect from "react-select" import { ThemeContext } from "./App" export const Select = props => { const theme = React.useContext(ThemeContext) const customStyles = { control: (provided, state) => ({ ...provided, zIndex: theme.zIndex["10"], fontFamily: theme.fontFamily.sans.join(","), fontSize: theme.fontSize.base, borderColor: state.isFocused ? theme.colors.blue["500"] : theme.colors.gray["300"], borderWidth: theme.borderWidth["2"], outline: "none", boxShadow: "none", "&:hover": { borderColor: state.isFocused ? theme.colors.blue["500"] : theme.colors.gray["500"], }, }), menu: provided => ({ ...provided, fontFamily: theme.fontFamily.sans.join(","), fontSize: theme.fontSize["text-base"], }), option: (provided, state) => ({ ...provided, backgroundColor: state.isSelected ? theme.colors.blue["500"] : theme.colors.white, "&:hover": { ...provided["&:hover"], backgroundColor: theme.colors.blue["700"], color: theme.colors.white, }, }), } return}
В этом файле мы экспортируем BASESELECT
С некоторыми стилями по умолчанию, которые поступают из наших тема
Анкет
Эти ценности темы поступают из Theme.js
объект, который добавил в наш контекст! Это возможно на линии const.usecontext (hemecontext)
Где мы установили тему, чтобы получить из нашего контекста, мы установили в App.js
Анкет
Здесь нужно отметить, что у семьи шрифтов есть ценность theme.fontfamily.sans.join ("")
Анкет В основном, Fontfamily
Ключевые значения – это массив, поэтому он будет действительным для Фонт-семья
Свойство CSS, мы хотим присоединиться к этому массиву, чтобы иметь место между каждым значением т.е. ['Open Sans', 'sans-serif']
В качестве примера станет Open Sans, Sans-Serif
Анкет
Этот стиль не идеален. Это всего лишь некоторые стили, с которыми я играл этим утром, но они иллюстрируют смысл.
Запуск приложения
Давайте подведем наше приложение и пойдем нормально:
yarn start
Теперь вы можете увидеть, что у нас применяется стили темы Tailwind!
Теперь мы можем увидеть эти изменения в действии. Если мы вернемся к нашему src/select.jsx
Подайте и замените все экземпляры Theme.colors.blue
с Theme.colors.teal
, теперь вы увидите Тил!
Поздравляю, теперь у вас есть доступ к ценностям темы Tailwind в вашем приложении React!
Ресурсы и дальнейшее чтение
- Заполненный проект на GitHub
- React Select – пользовательские стили
- Tailwind – ссылка на JavaScript
- React Context API
Изображение предоставлено: Ибрагим Асад
Первоначально опубликовано на моем блог . Следуйте за мной в Твиттере за более скрытыми драгоценными камнями @dennisokeeffe92 .
Оригинал: “https://dev.to/okeeffed/how-to-use-your-tailwind-theme-anywhere-throughout-your-react-app-2a6i”