Полный видео-курс по Sass
2 года назад·3 мин. на чтение
Это полный курс по Sass, он содержит подробное описание всех особенностей работы c Sass: синтаксис, миксины, наследование, функции, модули, ключевые слова и т.д.
Sass это препроцессор. Он переводит sass-код в чистый css, так как браузер понимает только css. Sass просто удобнее использовать за счет того, что он расширяет возможности css, добавляет новый синтаксис.
Sass помогает удобнее организовать стили и сделать их более удобными для восприятия и работы, и в целом сокращает количество кода. Можно выносить общие участки стилей и переиспользовать их с возможностью кастомизации.
7. Наследование в Sass -
В этом видео поговорим о наследовании в Sass (Sass inheritance), рассмотрим примеры использования наследования и ключевое слово extend. Рассмотрим примеры приватных placeholder селекторов.
Смотреть на Rutube
9. Циклы и условия в Sass:
В этом видео говорим об управляющих директивах в Sass для проверки условий и запуска циклов. Управляющие директивы Sass включают такие директивы как
11. Модули Sass:
В этом видео рассматриваем модули Sass и способы их импорта с помощью
16. О типе
В этом видео рассматриваем модуль
17. Списки в Sass - тип
В этом видео рассматриваем модуль
1. Что такое Sass?
В этом видео говорим об особенностях Sass, рассматриваем два вида синтаксиса Sass, компилируем стили с sass watch, а также добавляем комментарии в стили. Смотреть на Rutube2. Все о миксинах в Sass
В этом видео говорим о миксинах (mixin) в Sass, как передавать аргументы в миксины, как передать произвольное количество аргументов в миксины, блок content и т.д. Смотреть на Rutube3. Переменные Sass и Как переключать темы с CSS и JavaScript в React приложении?
В этом видео говорим о Sass переменных, об областях видимости Sass переменных, нюансах их использования, сравниваем переменные Sass и CSS, а также внедряем динамическое переключение тем в React приложение с помощью CSS переменных и JavaScript. Смотреть на Rutube4. Интерполяция в Sass?
В этом видео говорим об интерполяции в Sass, особенностях применения интерполяции в Sass и как создавать классы со значениями переменных в именах. Смотреть на Rutube5. Все секреты вложенности в Sass
В этом видео говорим о вложенности в Sass, рассматриваем вложенность свойств и селекторов, добавляем селектор родителя Sass для имен вложенных классов и создания классов как в методологии BEM. Смотреть на Rutube6. Все директивы Sass
В этом выпуске поговорим о директивах в Sass, рассмотрим группы директив для импорта, генерации стилей, контроля управления и т.д. Смотреть на Rutube7. Наследование в Sass - @extend
В этом видео поговорим о наследовании в Sass (Sass inheritance), рассмотрим примеры использования наследования и ключевое слово extend. Рассмотрим примеры приватных placeholder селекторов.
Смотреть на Rutube
8. Как написать функцию в Sass?
В этом видео поговорим о функциях в Sass, посмотрим как передавать именованные аргументы, пары ключ-значения, значения по умолчанию и произвольное число аргументов. Напишем несколько кастомных функций для возведения числа в степень и конкатенации строк. Смотреть на Rutube9. Циклы и условия в Sass: for
, while
, each
, if
В этом видео говорим об управляющих директивах в Sass для проверки условий и запуска циклов. Управляющие директивы Sass включают такие директивы как @if
, @each
, @while
, @for
.
Смотреть на Rutube
10. Что и для чего: миксины, наследование и функции в Sass
В этом видео рассматриваем особенности использования миксинов, наследования и функций в Sass. Смотреть на Rutube11. Модули Sass: use
, forward
, import
В этом видео рассматриваем модули Sass и способы их импорта с помощью use
, import
и forward
.
Смотреть на Rutube
12. Как запустить JavaScript функцию в Sass?
Смотреть на Rutube13. Как скрыть свойство Sass по условию?
Рассматриваем как скрывать свойства в Sass, ключевое слово null и его особенности; как работать с глобальной функцией if, и как определить вызван ли миксин внутри класса или вне его. Смотреть на Rutube14. Встроенные модули Sass
В этом видео рассматриваем встроенные модули Sass и глобальные функции Sass. Смотреть на Rutube15. Все о математических функциях в Sass
В этом видео рассматриваем математические функции Sass и нюансы работы с ними. Смотреть на Rutube16. О типе map
в Sass
В этом видео рассматриваем модуль sass:map
.
Смотреть на Rutube
17. Списки в Sass - тип list
В этом видео рассматриваем модуль sass:list
.
Смотреть на Rutube
Исходный код проектаХуки useTransition и useDeferredValue в ReactJS 18
2 года назад·3 мин. на чтение
В React 18, релиз которого произошел в марте 2022, появилось много новых инструментов для написания производительных и отзывчивых приложений. Одним из заметных изменений является механизм рендеринга с новой ключевой концепцией: конкурентный рендеринг (concurrent rendering).
В этой статье повнимательнее рассмотрим два новых хука:
Какое обновление можно считать срочным, а какое обычным?
Хук
До React 18 все обновления состояния помечались как "срочные". Это означает, что все обновления состояния обрабатывались одинаково с одинаковым приоритетом.
С помощью
Когда использовать
Одним из примеров может быть список товаров с параметрами фильтрации.
Когда вы переключаете чекбоксы, чтобы выбрать размер или цвет одежды, вы ожидаете, что чекбоксы сразу же отобразят отмеченное или снятое состояние.
А сам список товаров, которые необходимо обновить согласно фильтрам, может быть отдельным и менее срочным обновлением.
Как использовать
Хук
Когда использовать
С помощью
Как использовать
useTransition()
и useDeferredValue()
.
Эти два хука дают возможность определять приоритет обновления состояния, или, скорее, указывать, является ли обновление менее важным, чем другие, и откладывать его в пользу более срочных.
- Срочные обновления: отражают прямое взаимодействие, такое как набор текста, клики, нажатия и т. д., т.е. то с чем взаимодействует пользователь. Когда вы вводите текст в поле ввода, вы хотите сразу увидеть введенный вами текст. В противном случае UI будет казаться медленным и подлагивать. Поэтому мы хотим сделать такие обновления приоритетным.
- Обычные обновления: переход пользовательского интерфейса из одного вида в другой. Пользователи знают, что представление должно измениться или обновиться (например, когда ожидается ответ на запрос данных). Даже если есть небольшая задержка, это можно рассматривать как ожидаемое поведение, и это не будет восприниматься как медлительность приложения.
Хук useTransition()
и функция startTransition()
До React 18 все обновления состояния помечались как "срочные". Это означает, что все обновления состояния обрабатывались одинаково с одинаковым приоритетом.
С помощью useTransition()
теперь можно пометить некоторые обновления состояния как несрочные.
Когда использовать useTransition()
?
Одним из примеров может быть список товаров с параметрами фильтрации.
Когда вы переключаете чекбоксы, чтобы выбрать размер или цвет одежды, вы ожидаете, что чекбоксы сразу же отобразят отмеченное или снятое состояние.
А сам список товаров, которые необходимо обновить согласно фильтрам, может быть отдельным и менее срочным обновлением.
Как использовать useTransition()
?
function App() { const [isPending, startTransition] = useTransition(); const [searchQuery, setSearchQuery] = useState(''); // запрос данных, который занимает некоторое время const filteredResults = getProducts(searchQuery); function handleQueryChange(event) { startTransition(() => { // оборачивая setSearchQuery() в startTransition(), // мы помечаем эти обновления как менее важные setSearchQuery(event.target.value); }); } return ( <div> <input type="text" onChange={handleQueryChange} /> {isPending && <span>Loading...</span>} <ProductsList results={filteredResults} /> </div> ); }
Хук useDeferredValue()
useDeferredValue()
очень похож на useTransition()
в том, что он позволяет отложить несрочное обновление состояния, но применяется его к части дерева.
Это похоже методы debounce и throttle, которые мы часто используем для отложенных обновлений. React будет работать с такими обновлениями, как только завершатся срочные обновления.
Когда использовать useDeferredValue()
?
С помощью useTransition()
вы сами решаете, когда конкретное обновление состояния может быть помечено как менее срочное. Но иногда такой возможности может и не быть, например, если фрагмент кода находится в сторонней библиотеке.
В таких случаях можно воспользоваться хуком useDeferredValue()
. С помощью useDeferredValue()
вы можете обернуть значение и пометить его изменения как менее важные и, следовательно, отложить повторный рендеринг.
useDeferredValue()
будет возвращать предыдущее значение до тех пор, пока есть более срочные обновления для завершения и отображения дерева с обновленным значением.
Как использовать useDeferredValue()
?
function ProductsList({ results }) { // deferredResults получат обновленные данные // когда завершатся срочные обновления const deferredResults = useDeferredValue(results); return ( <ul> {deferredResults.map((product) => ( <li key={product.id}>{product.title}</li> ))} </ul> ); }