Как использовать переменные SCSS в моих компонентах React

Я работаю над проектом React, который следует этой структуре

src |
  components |
    Footer |
      index.jsx
      styles.scss
    Header |
      index.jsx
      styles.scss
    scss |
      helpers.scss
      variables.scss
      ...
    main.scss

В моем файле переменных я использовал пользовательские переменные css, поэтому все они находятся на :root, и я могу получить к ним доступ в своих стилях компонентов.

Когда я хотел создать темные цвета, я хотел использовать функцию SCSS darken, но она не оценивает их и выдает ошибку, говоря, что var(--blue) не является допустимым цветом.

В качестве решения я решил переместить все переменные в переменные SCSS, но когда проект строится, возникает другая ошибка, в которой говорится, что $blue не определен.

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
14
0
18 074
5

Ответы 5

Я могу порекомендовать вам решить эту проблему разными способами.

1- Дублируйте значения этих переменных. Добавьте их как в свой файл variables.scss, так и в качестве констант в какой-нибудь другой файл, возможно, в config.js или constants.js, таким образом вы сможете ссылаться на эти значения из своих реагирующих компонентов. Обратной стороной этого является то, что у вас будет не забудьте изменить их в двух местах, если вам нужно изменить значение.

2- Рассмотрите возможность использования стилизованные компоненты. С помощью стилизованных компонентов вы можете определять свои стили внутри своих компонентов, используя переменные или свойства внутри стилей.

3- Используйте какой-либо механизм, чтобы определить эти переменные в одном файле или как переменные среды, и настройте процесс сборки, чтобы иметь возможность импортировать эти значения в файлы js и scss.

Я изучу стилизованные компоненты.

abaracedo 20.10.2018 09:19

первая альтернатива - плохой совет!

Dejan.S 18.09.2019 12:25

Я использую аналогичную структуру для организации моих файлов .scss. Мне нравится, когда стили находятся в той же папке, что и компонент. Однако я импортирую все файлы scss в свой файл main.scss. Это помогает избежать конфликтов стилей в DOM.

main.scss

import "./scss/helpers.scss"
import "./variables.scss"
import "./Footer/style.scss"
import "./Header/styles.scss"

Обязательно называйте файлы подчеркиванием, чтобы все файлы были объединены при компиляции. Обратите внимание, что вам не нужно указывать подчеркивание при импорте.

_helpers.scss
_variable.scss
_style.scss

Используя этот метод, вам нужно импортировать стили в приложение только один раз. index.jsx

Это позволяет использовать разбиение кода? Что будет, если у вас будет очень большой проект?

abaracedo 20.10.2018 09:18

Я делаю это с очень большими проектами. Мне нравится иметь небольшие файлы scss рядом с их компонентами. Что касается производительности. Что я обнаружил в других системах, так это то, что часто возникают конфликты DOM, когда один стиль CSS перекрывает другой. При использовании частичных стилей в DOM не перезаписываются стили.

matthew 22.10.2018 17:09

Можно использовать пользовательские переменные с этой структурой проекта с помощью миксина css-vars.

После того, как я предложил возможность оценивать пользовательские переменные перед выполнением функции SCSS, один парень предложил мне этот миксин. Я только что протестировал и работает довольно хорошо.

I, если вы не хотите использовать styled-component тогда вы можете перейти по этой ссылке. https://til.hashrocket.com/posts/sxbrscjuqu-share-scss-variables-with-javascript

Из React 17

Чтобы получить доступ к вашим переменным scss в компонент реакции, вам нужно сделать что-то вроде этого

  1. Установите node-sass как зависимость или зависимость разработчика
  2. Нет необходимости вносить какие-либо изменения в конфигурацию в webpack
  3. импортировать как модуль <- главное

variables.module.scss

$color: skyblue;
$primaryColor: red;

:export {
    color: $color;
    primary-color: $primaryColor;
}

App.js

import variables from '<YOUR_PATH>/variables.module.scss';

const App = () => {
    console.info(variables);
}

Другие вопросы по теме