Forwarded from Cat in Web
Легковесные альтернативы Redux
Статья (англ.): https://blog.openreplay.com/lightweight-alternatives-to-redux
Автор статьи рассказывает, какие инструменты можно использовать для управления глобальным состоянием приложения вместо Redux.
1. Хуки React
Простейший вариант - использовать встроенные хуки. С помощью
2. Zustand
Zustand использует те же flux-принципы, что и Redux. Мы создаем хранилище с помощью функции
3. Jotai
Разработан той же командой, что и Zustand, но использует другой подход - атомарный (atomic). Каждая часть данных оформляется в виде атома с помощью функции
4. Valtio
Подход Valtio базируется на использовании прокси. Мы передаем объект в функцию
В статье есть примеры кода для всех этих решений, можно сформировать общее впечатление и заинтересоваться чем-нибудь.
#redux #react #statemanagement #library
Статья (англ.): https://blog.openreplay.com/lightweight-alternatives-to-redux
Автор статьи рассказывает, какие инструменты можно использовать для управления глобальным состоянием приложения вместо Redux.
1. Хуки React
Простейший вариант - использовать встроенные хуки. С помощью
useReducer
мы выносим состояние приложения в отдельный объект и можем удобно им управлять, а с помощью контекста доставляем этот объект до всех заинтересованных компонентов. Пример.2. Zustand
Zustand использует те же flux-принципы, что и Redux. Мы создаем хранилище с помощью функции
create
и получаем из нее хук useStore
, который можно использовать в компонентах. 3. Jotai
Разработан той же командой, что и Zustand, но использует другой подход - атомарный (atomic). Каждая часть данных оформляется в виде атома с помощью функции
atom
. Для работы с атомами есть хук useAtom
, который работает так же, как useState
. 4. Valtio
Подход Valtio базируется на использовании прокси. Мы передаем объект в функцию
proxy
и дальше можем его мутировать - прокси отслеживает все изменения.В статье есть примеры кода для всех этих решений, можно сформировать общее впечатление и заинтересоваться чем-нибудь.
#redux #react #statemanagement #library
Openreplay
Lightweight Alternatives to Redux
Forget about Redux for a minute and think aboutside the box
👍2
Forwarded from Cat in Web
React World
Развлекалочка на React: https://sfatihk.github.io/react-world/
Скроль страницу и совершай небольшое путешествие с героями любимых фильмов.
А потом можно залезть в исходники и посмотреть, как все это работает: https://github.com/sfatihk/react-world
#react
Развлекалочка на React: https://sfatihk.github.io/react-world/
Скроль страницу и совершай небольшое путешествие с героями любимых фильмов.
А потом можно залезть в исходники и посмотреть, как все это работает: https://github.com/sfatihk/react-world
#react
👍2
Forwarded from Cat in Web
React 18
Перевод оригинальной статьи на Хабре: https://habr.com/ru/post/659537/
Обзор новинок последнего релиза - а их немало.
Конкурентный рендеринг
Кардинально изменилась модель рендеринга, появилась конкурентность - нечто подкапотное, что позволяет подготавливать несколько версий интерфейса одновременно. Рендеринг теперь может прерываться, откладываться (раньше был синхронным). Благодаря этому основной поток не блокируется и приложение может реагировать на действия пользователя, даже если за кулисами рендерится что-то огромное.
Появилось несколько новых хуков для работы с новым функционалом, однако в перспективе команда React ожидает, что они будут использоваться в основном для интеграции библиотек с поддержкой конкурентности, а не напрямую. Например, библиотекой маршрутизации для перехода между страницами.
Автоматическое пакетирование
Или группировка нескольких обновлений в один рендеринг. Раньше пакетировались только обновления внутри обработчиков событий React, теперь пакетируются еще и обновления внутри промисов, таймеров, нативных обработчиков и пр.
Переходы (transitions)
Обновления теперь делятся на срочные (немедленная реакция на действие пользователя, например, ввод текста) и переходные (не срочные). Последние - это переход интерфейса из одного состояния в другое (например, появление списка результатов после применения фильтров).
Новая функция
Suspense
Расширились возможности React.Suspense. Раньше он только позволял лениво загружать код с помощью React.lazy и не поддерживался при серверном рендеринге. Теперь работает и на сервере тоже и хорошо сочетается с API переходов.
Новые API рендеринга
Новые методы для рендеринга -
Двойное монтирование компонентов
В строгом режиме в dev mode добавлена проверка на "устойчивость к многократному монтированию" - компоненты в первый раз монтируются, сразу размонтируются с сохранением состояния и монтируются снова. Это нужно для будущих улучшений.
Новые хуки
-
-
-
-
-
#react
Перевод оригинальной статьи на Хабре: https://habr.com/ru/post/659537/
Обзор новинок последнего релиза - а их немало.
Конкурентный рендеринг
Кардинально изменилась модель рендеринга, появилась конкурентность - нечто подкапотное, что позволяет подготавливать несколько версий интерфейса одновременно. Рендеринг теперь может прерываться, откладываться (раньше был синхронным). Благодаря этому основной поток не блокируется и приложение может реагировать на действия пользователя, даже если за кулисами рендерится что-то огромное.
Появилось несколько новых хуков для работы с новым функционалом, однако в перспективе команда React ожидает, что они будут использоваться в основном для интеграции библиотек с поддержкой конкурентности, а не напрямую. Например, библиотекой маршрутизации для перехода между страницами.
Автоматическое пакетирование
Или группировка нескольких обновлений в один рендеринг. Раньше пакетировались только обновления внутри обработчиков событий React, теперь пакетируются еще и обновления внутри промисов, таймеров, нативных обработчиков и пр.
Переходы (transitions)
Обновления теперь делятся на срочные (немедленная реакция на действие пользователя, например, ввод текста) и переходные (не срочные). Последние - это переход интерфейса из одного состояния в другое (например, появление списка результатов после применения фильтров).
Новая функция
startTransition
(или хук useTransition
) позволяет явно указать "не срочные" обновления. Их выполнение может быть прервано, если в процессе поступят какие-то "срочные" обновления. Suspense
Расширились возможности React.Suspense. Раньше он только позволял лениво загружать код с помощью React.lazy и не поддерживался при серверном рендеринге. Теперь работает и на сервере тоже и хорошо сочетается с API переходов.
Новые API рендеринга
Новые методы для рендеринга -
createRoot
и hydrateRoot`на клиенте, `renderToPipeableStream
и renderToReadableStream
на сервере.Двойное монтирование компонентов
В строгом режиме в dev mode добавлена проверка на "устойчивость к многократному монтированию" - компоненты в первый раз монтируются, сразу размонтируются с сохранением состояния и монтируются снова. Это нужно для будущих улучшений.
Новые хуки
-
useId
- генерация уникальных идентификаторов-
useTransition
- позволяет пометить обновления как "переходные" (см. выше)-
useDeferredValue
- откладывает не срочный перерендеринг-
useSyncExternalStore
- хук для библиотек, работающих с внешним состоянием-
useInsertionEffect
- хук для библиотек CSS-in-JS для инъекции стилей, срабатывает до layout effect.#react
Хабр
React 18
В нашем последнем посте мы поделились пошаговыми инструкциями по обновлению вашего приложения до React 18 . В текущем посте мы дадим обзор того, что нового появилось в React 18, и что это означает для...
👍1
Forwarded from Cat in Web
Шахматы на React и TypeScript С НУЛЯ. Практикуем ООП
Видео (рус.): https://www.youtube.com/watch?v=mUvYGUYMvKo
Часовое (1 час 12 минут) руководство по созданию шахмат на React. Все последовательно и очень понятно, даже если вы (как я) не особенно близко знакомы с TypeScript. Если не планируете повторять, можно смотреть на скорости 1.5.
Логика игры максимально отделена от представления, поэтому вместо React ее можно реализовать на чем угодно.
Модели
👉 Класс
👉 Класс
👉 Класс
Все эти классы связаны: доска может обращаться к своим клеткам, клетки имеют ссылку на доску и на фигуры, которые на них стоят, а фигуры могут ссылаться на свою клетку. В целом это не очень хорошая практика, так как образуются кольцевые зависимости, но она позволяет наладить довольно удобное взаимодействие.
В видео полностью реализована логика перемещения фигур, переход хода и даже таймер игры. Но есть так же несколько задач для "домашней работы".
Мое повторение за автором: https://codesandbox.io/s/checkmate-react-ts-o8ob16?file=/src/models/Player.ts
#react #video #typescript
Видео (рус.): https://www.youtube.com/watch?v=mUvYGUYMvKo
Часовое (1 час 12 минут) руководство по созданию шахмат на React. Все последовательно и очень понятно, даже если вы (как я) не особенно близко знакомы с TypeScript. Если не планируете повторять, можно смотреть на скорости 1.5.
Логика игры максимально отделена от представления, поэтому вместо React ее можно реализовать на чем угодно.
Модели
👉 Класс
Board
(игровая доска) создает игровое поле и расставляет фигуры.👉 Класс
Cell
(клетка доски) имеет цвет, координаты и знает, какая фигура на ней находится👉 Класс
Figure
(фигура) и 6 дочерних классов для отдельных фигур хранят логику передвижения фигур по доске.Все эти классы связаны: доска может обращаться к своим клеткам, клетки имеют ссылку на доску и на фигуры, которые на них стоят, а фигуры могут ссылаться на свою клетку. В целом это не очень хорошая практика, так как образуются кольцевые зависимости, но она позволяет наладить довольно удобное взаимодействие.
В видео полностью реализована логика перемещения фигур, переход хода и даже таймер игры. Но есть так же несколько задач для "домашней работы".
Мое повторение за автором: https://codesandbox.io/s/checkmate-react-ts-o8ob16?file=/src/models/Player.ts
#react #video #typescript
YouTube
Шахматы на React и TypeScript С НУЛЯ. Практикуем ООП
В этом ролике мы разработаем свои шахматы на React и typescript. Попрактикуем ООП. Шахматы на Javascript.
Мой курс "Продвинутый Frontend. В production на React" - https://ulbitv.ru/frontend
Initial шаблон для проекта с фигурками и финальный исходный код…
Мой курс "Продвинутый Frontend. В production на React" - https://ulbitv.ru/frontend
Initial шаблон для проекта с фигурками и финальный исходный код…
👍1