Новая документация React
React запустил бету версию сайта документации beta.reactjs.org. Пока что она в процессе наполнения и не все разделы сайта готовы. Но уже сейчас видно, чем новая документация будет отличаться от старой: будет больше интерактивных примеров, добавятся задачи на понимание принципов работы React. Также во всех примерах и объяснениях будут использоваться хуки, а не классы.
https://beta.reactjs.org/
React запустил бету версию сайта документации beta.reactjs.org. Пока что она в процессе наполнения и не все разделы сайта готовы. Но уже сейчас видно, чем новая документация будет отличаться от старой: будет больше интерактивных примеров, добавятся задачи на понимание принципов работы React. Также во всех примерах и объяснениях будут использоваться хуки, а не классы.
https://beta.reactjs.org/
react.dev
React is the library for web and native user interfaces. Build user interfaces out of individual pieces called components written in JavaScript. React is designed to let you seamlessly combine components written by independent people, teams, and organizations.
👍16👎1
Тестирование React компонентов с помощью Testing Library
Вводный гайд как тестировать компоненты с помощью библиотеки Testing Library. Автор покрывает основные сценарии тестирования, включая моки fetch запросов, получение элементов по роли и снапшотное тестирование.
Хорошая статья для тех, кто еще не знаком с Testing Library и хочет научиться писать на нем тесты.
https://dev.to/ohdylan/react-component-testing-54ie
Вводный гайд как тестировать компоненты с помощью библиотеки Testing Library. Автор покрывает основные сценарии тестирования, включая моки fetch запросов, получение элементов по роли и снапшотное тестирование.
Хорошая статья для тех, кто еще не знаком с Testing Library и хочет научиться писать на нем тесты.
https://dev.to/ohdylan/react-component-testing-54ie
DEV Community
React Component Testing
In our last article, we have introduced the usage of Jest to test our JavaScript code Start Testing...
👍5
Кастомные хуки и производительность приложения
Надя Макаревич рассказывает про то, как не стоит писать кастомные хуки, а также про их влияние на производительность. При разработке кастомных хуков стоит учитывать, что изменение стейта внутри хука будет провоцировать ререндер компонента. По сути, стейты, которые определены в хуке, будут подняты в сам компонент. В этом нет ничего плохого, это нормальное поведение хуков. Однако, это может привести к проблемам с производительностью.
Например, если есть компонент, выполняющий “тяжелые” вычисления и в него нужно добавить кастомный хук, то лучше этот хук добавить в дочернем компоненте. С таким подходом, при работе с хуком будут происходить ререндеры в дочернем компоненте, не влияя на “тяжелый” родительский компонент.
https://www.developerway.com/posts/why-custom-react-hooks-could-destroy-your-app-performance
Надя Макаревич рассказывает про то, как не стоит писать кастомные хуки, а также про их влияние на производительность. При разработке кастомных хуков стоит учитывать, что изменение стейта внутри хука будет провоцировать ререндер компонента. По сути, стейты, которые определены в хуке, будут подняты в сам компонент. В этом нет ничего плохого, это нормальное поведение хуков. Однако, это может привести к проблемам с производительностью.
Например, если есть компонент, выполняющий “тяжелые” вычисления и в него нужно добавить кастомный хук, то лучше этот хук добавить в дочернем компоненте. С таким подходом, при работе с хуком будут происходить ререндеры в дочернем компоненте, не влияя на “тяжелый” родительский компонент.
https://www.developerway.com/posts/why-custom-react-hooks-could-destroy-your-app-performance
Developerway
Why custom react hooks could destroy your app performance
Exploring performance implications of custom React hooks and how not to shoot yourself in the foot when writing or using them.
👍6
Лучшие практики React
На Freecodecamp вышла большая статья с набором советов по лучшим практикам в React. Прежде всего необходимо понять, с какими проблемами сталкиваются разработчики React:
- Поддержка кода. В начальной стадии проекта нет проблем с поддержкой. Но с ростом количества требований проект становится все больше. Компоненты становятся сложнее и менее поддерживаемыми.
- Масштабируемость проекта. При разработке компонентов и структуры проекта нужно держать в голове идею о том, как проект будет масштабироваться. Следуя этой идее вы с меньшей вероятностью столкнетесь с беспорядком в коде, который потребует серьезного рефакторинга.
- Уверенное понимание React. Проблема в том, что разработчики плохо понимают как работает React под капотом. Это может привести к багам и проблемам с производительностью приложения.
В статье даны как архитектурные, так и практические советы по написанию кода для начинающих разработчиков. Разберем кратко часть из них:
- Создайте хорошую структуру проекта. Организация файлов и папок в проекте влияет на удобство поддержки и масштабируемости.
- Поддерживайте порядок импортов. Разделяйте импорты по уровням, например, сначала внешние модули, потом внутренние модули. Управлять порядком импортов можно с помощью линтера.
- Изучайте разные паттерны компонентов. Например, использование compound components позволяет избавиться от проп дриллинга.
- Используйте TypeScript. Статическая типизация в крупных проектах будет большим плюсом.
- Используйте lazy loading / code splitting. Уменьшение размера бандла положительно скажется на скорости загрузки сайта.
- Обрабатывайте ошибки. Используйте обертку React Error Boundary, чтобы перехватывать ошибки в компонентах и, например, передавать эти ошибки на сервер в логи.
https://www.freecodecamp.org/news/best-practices-for-react/
На Freecodecamp вышла большая статья с набором советов по лучшим практикам в React. Прежде всего необходимо понять, с какими проблемами сталкиваются разработчики React:
- Поддержка кода. В начальной стадии проекта нет проблем с поддержкой. Но с ростом количества требований проект становится все больше. Компоненты становятся сложнее и менее поддерживаемыми.
- Масштабируемость проекта. При разработке компонентов и структуры проекта нужно держать в голове идею о том, как проект будет масштабироваться. Следуя этой идее вы с меньшей вероятностью столкнетесь с беспорядком в коде, который потребует серьезного рефакторинга.
- Уверенное понимание React. Проблема в том, что разработчики плохо понимают как работает React под капотом. Это может привести к багам и проблемам с производительностью приложения.
В статье даны как архитектурные, так и практические советы по написанию кода для начинающих разработчиков. Разберем кратко часть из них:
- Создайте хорошую структуру проекта. Организация файлов и папок в проекте влияет на удобство поддержки и масштабируемости.
- Поддерживайте порядок импортов. Разделяйте импорты по уровням, например, сначала внешние модули, потом внутренние модули. Управлять порядком импортов можно с помощью линтера.
- Изучайте разные паттерны компонентов. Например, использование compound components позволяет избавиться от проп дриллинга.
- Используйте TypeScript. Статическая типизация в крупных проектах будет большим плюсом.
- Используйте lazy loading / code splitting. Уменьшение размера бандла положительно скажется на скорости загрузки сайта.
- Обрабатывайте ошибки. Используйте обертку React Error Boundary, чтобы перехватывать ошибки в компонентах и, например, передавать эти ошибки на сервер в логи.
https://www.freecodecamp.org/news/best-practices-for-react/
freeCodeCamp.org
React Best Practices – Tips for Writing Better React Code
By Jean-Marc Möckel Two years ago, I started to learn and use React. And today I'm still using it at my day job as a Software Developer and in my own side projects. During that time I've come across a lot of "typical" issues. So I searched around and...
👍12
Какую проблему решают веб-фреймворки
Ноам Розенталь написал исследовательскую серию статей по веб-фреймворкам. В чем популярные фреймворки похожи, а в чем отличаются? Можно ли их заменить на VanillaJS, используя текущие возможности веба, и насколько это будет оправданно.
В качестве основного фреймворка для исследования был выбран React. В дополнение к нему были выбраны три новых фреймворка: SolidJS, Svelte и Lit.
Все эти фреймворки решают одни и те же проблемы, но разными способами. Каждый фреймворк по разному реализует реактивность, привязку данных и управление потоком данных.
На VanillaJS, для реализации в своем приложении паттернов из популярных фреймворков можно использовать уже готовые вещи из веб-платформы. Для декларативного стиля программирования использовать HTML и CSS, а для реактивности использовать CSS каскад.
Часть 1. https://www.smashingmagazine.com/2022/01/web-frameworks-guide-part1/
Часть 2. https://www.smashingmagazine.com/2022/02/web-frameworks-guide-part2/
Ноам Розенталь написал исследовательскую серию статей по веб-фреймворкам. В чем популярные фреймворки похожи, а в чем отличаются? Можно ли их заменить на VanillaJS, используя текущие возможности веба, и насколько это будет оправданно.
В качестве основного фреймворка для исследования был выбран React. В дополнение к нему были выбраны три новых фреймворка: SolidJS, Svelte и Lit.
Все эти фреймворки решают одни и те же проблемы, но разными способами. Каждый фреймворк по разному реализует реактивность, привязку данных и управление потоком данных.
На VanillaJS, для реализации в своем приложении паттернов из популярных фреймворков можно использовать уже готовые вещи из веб-платформы. Для декларативного стиля программирования использовать HTML и CSS, а для реактивности использовать CSS каскад.
Часть 1. https://www.smashingmagazine.com/2022/01/web-frameworks-guide-part1/
Часть 2. https://www.smashingmagazine.com/2022/02/web-frameworks-guide-part2/
Smashing Magazine
What Web Frameworks Solve And How To Do Without Them (Part 1) — Smashing Magazine
In this article, Noam Rosenthal dives deep into a few technical features that are common across frameworks, and explains how some of the different frameworks implement them and what they cost, focusing on data-binding, reactivity, conditionals and lists.…
👍5
Производительные React приложения с помощью Context
При неправильном использовании контекста очень часто возникают проблемы с производительностью, связанные с лишним ререндером компонентов. Надя Макаревич поэтапно показала как можно оптимизировать работу с формой ввода данных, используя контекст. Форма состоит из нескольких компонентов, в каждом из которых находится свой элемент ввода.
При создании единого провайдера данных стоит учитывать, что при изменении значения контекста React вызовет ререндер всех компонентов потребителей независимо от того, используют ли они измененное значение или нет. Если есть несколько потребителей, то можно создать для каждого потребителя отдельный контекст. В этом случае изменение одного элемента формы не вызовет ререндер остальных компонентов формы.
Создание нескольких провайдеров для одной формы – довольно сложно и ухудшает поддержку компонента. Если присмотреться к полученной реализации, то можно увидеть, что мы реализовали свой собственный стейт менеджер. Форма была лишь показательным примером того, как работает контекст и как можно его оптимизировать.
https://www.developerway.com/posts/how-to-write-performant-react-apps-with-context
При неправильном использовании контекста очень часто возникают проблемы с производительностью, связанные с лишним ререндером компонентов. Надя Макаревич поэтапно показала как можно оптимизировать работу с формой ввода данных, используя контекст. Форма состоит из нескольких компонентов, в каждом из которых находится свой элемент ввода.
При создании единого провайдера данных стоит учитывать, что при изменении значения контекста React вызовет ререндер всех компонентов потребителей независимо от того, используют ли они измененное значение или нет. Если есть несколько потребителей, то можно создать для каждого потребителя отдельный контекст. В этом случае изменение одного элемента формы не вызовет ререндер остальных компонентов формы.
Создание нескольких провайдеров для одной формы – довольно сложно и ухудшает поддержку компонента. Если присмотреться к полученной реализации, то можно увидеть, что мы реализовали свой собственный стейт менеджер. Форма была лишь показательным примером того, как работает контекст и как можно его оптимизировать.
https://www.developerway.com/posts/how-to-write-performant-react-apps-with-context
Developerway
How to write performant React apps with Context
De-mystifying Context and its influence on React apps' performance. Learning a few useful patterns in the process, that could help minimize the re-renders impact and improve code's readability and scalability.
👍7
Использование глобальной мемоизации в React
Когда приложение становится медленным, мы используем useMemo для избежания ненужных ререндеров компонента. Но useMemo подходит не всегда и иногда его использование добавляет больше бесполезной работы.
Владимир Клепов в своей статье объяснил, как работает useMemo, в каких случаях он бывает бесполезным, а также написал про четыре способа глобального кэширования, где кэш разделяется между компонентами.
https://thoughtspile.github.io/2022/02/09/react-global-memo/
Когда приложение становится медленным, мы используем useMemo для избежания ненужных ререндеров компонента. Но useMemo подходит не всегда и иногда его использование добавляет больше бесполезной работы.
Владимир Клепов в своей статье объяснил, как работает useMemo, в каких случаях он бывает бесполезным, а также написал про четыре способа глобального кэширования, где кэш разделяется между компонентами.
https://thoughtspile.github.io/2022/02/09/react-global-memo/
👍7
Повышаем производительность приложения используя React Profiler
React Profiler появился в 2018, но до сих пор пользуется не слишком большой популярностью. На inDepthDev делается разбор этого инструмента. На примере небольшого приложения происходит поэтапное улучшение его производительности, используя React Profiler.
React Profiler позволяет проанализировать, как много коммитов было сделано и какие компоненты были отрендерены, и сколько времени на это ушло. React Profiler не работает “на лету”, сначала нужно сделать запись сеанса профилирования, а уже потом проводить анализ.
Если понимать как работает React Profiler, то можно добиться серьезного увеличения производительности вашего React приложения.
https://indepth.dev/posts/1497/react-profiler
React Profiler появился в 2018, но до сих пор пользуется не слишком большой популярностью. На inDepthDev делается разбор этого инструмента. На примере небольшого приложения происходит поэтапное улучшение его производительности, используя React Profiler.
React Profiler позволяет проанализировать, как много коммитов было сделано и какие компоненты были отрендерены, и сколько времени на это ушло. React Profiler не работает “на лету”, сначала нужно сделать запись сеанса профилирования, а уже потом проводить анализ.
Если понимать как работает React Profiler, то можно добиться серьезного увеличения производительности вашего React приложения.
https://indepth.dev/posts/1497/react-profiler
👍6🔥1
Популярный стек для React
Экосистема React большая, постоянно появляются новые библиотеки и инструменты. Йоханнес Кеттманн собрал наиболее популярный стек для React. В качестве способа подсчета популярности является количество скачиваний библиотеки в npm.
Самые популярные библиотеки React:
- Next.js – фреймворк с серверным рендерингом из коробки.
- Redux – библиотека для управления стейта.
- react-query или Apollo – для получения данных.
- react-hook-form или Formik – управление формами.
Популярные библиотеки для написания тестов:
- Jest – для запуска тестов.
- React Testing Library – написание интеграционных тестов.
- Cypress – написание E2E тестов.
- Storybook – для документации и тестирования компонентов.
#beginner
https://profy.dev/article/react-tech-stack
Экосистема React большая, постоянно появляются новые библиотеки и инструменты. Йоханнес Кеттманн собрал наиболее популярный стек для React. В качестве способа подсчета популярности является количество скачиваний библиотеки в npm.
Самые популярные библиотеки React:
- Next.js – фреймворк с серверным рендерингом из коробки.
- Redux – библиотека для управления стейта.
- react-query или Apollo – для получения данных.
- react-hook-form или Formik – управление формами.
Популярные библиотеки для написания тестов:
- Jest – для запуска тестов.
- React Testing Library – написание интеграционных тестов.
- Cypress – написание E2E тестов.
- Storybook – для документации и тестирования компонентов.
#beginner
https://profy.dev/article/react-tech-stack
profy.dev
Most Popular React Tech Stack in 2023 (Based on Data)
The React ecosystem is huge so it's hard to keep an overview. Based on data here is a list of the most popular React libs used in 2022.
👍6
CSS анимации используя React
CSS анимации предоставляют декларативное API для анимации DOM элементов. Нужно всего лишь указать параметры анимации и определить keyframes, описывающие поведение в заданных точках. Тем не менее, в приложениях, где используется много анимаций, будет сложно поддерживать большое количество анимаций, написанных в CSS.
В техническом блоге BBC рассказали про декларативный подход к использованию CSS анимаций в React через компоненты-анимации. Такой подход позволяет через композицию объединить несколько анимаций.
С одной из проблем, с которой столкнулись авторы, является определение нужных переходов, в каждом из которых нужно запускать свою анимацию. Для решения данной проблемы используется библиотека по работе с конечными автоматами xstate.
https://medium.com/bbc-design-engineering/css-animations-as-a-dom-based-animations-framework-d6ef582c033a
CSS анимации предоставляют декларативное API для анимации DOM элементов. Нужно всего лишь указать параметры анимации и определить keyframes, описывающие поведение в заданных точках. Тем не менее, в приложениях, где используется много анимаций, будет сложно поддерживать большое количество анимаций, написанных в CSS.
В техническом блоге BBC рассказали про декларативный подход к использованию CSS анимаций в React через компоненты-анимации. Такой подход позволяет через композицию объединить несколько анимаций.
<FadeIn duration={2} delay={0}>
<Zoom from={1} to={2} duration={2} delay={2}>
<FadeOut duration={2} delay={4}>
<RedBox />
</FadeOut>
</Zoom>
</FadeIn>
С одной из проблем, с которой столкнулись авторы, является определение нужных переходов, в каждом из которых нужно запускать свою анимацию. Для решения данной проблемы используется библиотека по работе с конечными автоматами xstate.
https://medium.com/bbc-design-engineering/css-animations-as-a-dom-based-animations-framework-d6ef582c033a
Medium
CSS Animations as a DOM-Based Animations Framework
Learn how we have created a DOM-based Animations Framework to create re-usable, composable animations
👍5
Создаем свой React с рендером и useState за 30 минут
Создать свой React не так сложно, как вам может показаться. По крайней мере минимальную версию, которая будет только рендерить JSX. Основная работа заключается в компиляции JSX и рендере элементов.
В React используется синтаксис JSX. Для компиляции JSX в JavaScript можно выбрать TypeScript или babel. При компиляции выражение
Функция createElement принимает три параметра: тег, атрибуты и содержимое. В качестве содержимого могут быть другие вложенные элементы. Функция createElement возвращает объект React элемента, рендер которого происходит в ReactDOM.render. ReactDOM.render рекурсивно рендерит всех наследников переданного элемента и добавляет атрибуты к DOM элементу.
https://habr.com/ru/post/652487/
Создать свой React не так сложно, как вам может показаться. По крайней мере минимальную версию, которая будет только рендерить JSX. Основная работа заключается в компиляции JSX и рендере элементов.
В React используется синтаксис JSX. Для компиляции JSX в JavaScript можно выбрать TypeScript или babel. При компиляции выражение
<h1>React, what are you?</h1> превратится в React.createElement("h1", null, "React, what are you?"). Функция createElement принимает три параметра: тег, атрибуты и содержимое. В качестве содержимого могут быть другие вложенные элементы. Функция createElement возвращает объект React элемента, рендер которого происходит в ReactDOM.render. ReactDOM.render рекурсивно рендерит всех наследников переданного элемента и добавляет атрибуты к DOM элементу.
https://habr.com/ru/post/652487/
👍7
Griffel – новый CSS-in-JS от Microsoft
Microsoft презентовал свою CSS-in-JS библиотеку для стилизации React приложений. Основные фичи:
- возможность компиляции CSS во время сборки и в runtime
- типизация стилей через csstype
- использование Atomic CSS для переиспользования стилей и предотвращения проблем со специфичностью CSS.
Пример использования:
При написании стилей поддерживаются псевдоклассы, псевдоэлементы и at-правила. Также в Griffel есть API для создания глобальных стилей, которые не привязаны к компоненту – makeStaticStyles.
https://github.com/microsoft/griffel
Очень интересно наблюдать, как появляются новые CSS-in-JS библиотеки, особенно от таких крупных компаний. Еще в 2019 году Facebook рассказал о своей CSS-in-JS библиотеке – Stylex. Правда она еще до сих пор не появилась на гитхабе.
Microsoft презентовал свою CSS-in-JS библиотеку для стилизации React приложений. Основные фичи:
- возможность компиляции CSS во время сборки и в runtime
- типизация стилей через csstype
- использование Atomic CSS для переиспользования стилей и предотвращения проблем со специфичностью CSS.
Пример использования:
import { makeStyles } from '@griffel/react';
const useClasses = makeStyles({
button: { color: 'red' },
icon: { paddingLeft: '5px' },
});
function Component() {
const classes = useClasses();
return (
<div>
<button className={classes.button} />
<span className={classes.icon} />
</div>
);
}
При написании стилей поддерживаются псевдоклассы, псевдоэлементы и at-правила. Также в Griffel есть API для создания глобальных стилей, которые не привязаны к компоненту – makeStaticStyles.
https://github.com/microsoft/griffel
Очень интересно наблюдать, как появляются новые CSS-in-JS библиотеки, особенно от таких крупных компаний. Еще в 2019 году Facebook рассказал о своей CSS-in-JS библиотеке – Stylex. Правда она еще до сих пор не появилась на гитхабе.
GitHub
GitHub - microsoft/griffel: CSS-in-JS with ahead-of-time compilation ⚡️
CSS-in-JS with ahead-of-time compilation ⚡️. Contribute to microsoft/griffel development by creating an account on GitHub.
👍7👎3
Релиз версии Next.js 12.1
Произошел релиз Next.js 12.1 с одной из самых востребованных фич – Incremental Static Regeneration (ISR). ISR позволяет создавать и обновлять статические страницы сайта после сборки проекта. Обновление статической страницы возможно двумя способами. Обновить статическую страницу можно автоматически, спустя заданное количество секунд после последней генерации страницы:
Также возможно ручное обновление страницы. Например, такое пригодится для интернет-магазинов, при изменении цены товара на странице:
Другие изменения в новой версии:
- Улучшена поддержка SWC. Некоторые Babel плагины были портированы на Rust. Включена поддержка styled-components, relay.
- Автоматическая конфигурация Jest.
- Более быстрая минификация, используя SWC. В 7 раз быстрее чем Terser.
- Оптимизация изображений. API по работе с изображениями поддерживает паттерн ISR.
- Работа в сторону поддержки React 18, серверных компонентов и потокового SSR. Была обновлена документация для тех, кто хочет попробовать эти фичи.
https://nextjs.org/blog/next-12-1
Произошел релиз Next.js 12.1 с одной из самых востребованных фич – Incremental Static Regeneration (ISR). ISR позволяет создавать и обновлять статические страницы сайта после сборки проекта. Обновление статической страницы возможно двумя способами. Обновить статическую страницу можно автоматически, спустя заданное количество секунд после последней генерации страницы:
export async function getStaticProps() {
return {
// Next.js will attempt to re-generate the page:
// - When a request comes in
// - At most once every 10 seconds
revalidate: 10, // In seconds
}
}
Также возможно ручное обновление страницы. Например, такое пригодится для интернет-магазинов, при изменении цены товара на странице:
// pages/api/revalidate.js
export default async function handler(req, res) {
// Check for secret to confirm this is a valid request
if (req.query.secret !== process.env.MY_SECRET_TOKEN) {
return res.status(401).json({ message: 'Invalid token' })
}
try {
await res.unstable_revalidate('/path-to-revalidate')
return res.json({ revalidated: true })
} catch (err) {
// If there was an error, Next.js will continue
// to show the last successfully generated page
return res.status(500).send('Error revalidating')
}
}
Другие изменения в новой версии:
- Улучшена поддержка SWC. Некоторые Babel плагины были портированы на Rust. Включена поддержка styled-components, relay.
- Автоматическая конфигурация Jest.
- Более быстрая минификация, используя SWC. В 7 раз быстрее чем Terser.
- Оптимизация изображений. API по работе с изображениями поддерживает паттерн ISR.
- Работа в сторону поддержки React 18, серверных компонентов и потокового SSR. Была обновлена документация для тех, кто хочет попробовать эти фичи.
https://nextjs.org/blog/next-12-1
nextjs.org
Next.js 12.1
Next.js 12.1 introduces on-demand ISR, support for styled-components and Relay, zero-config Jest support, and more!
👍7
Доступен React 18 RC
Версия React 18 стала доступна в качестве релиз-кандидата. Чтобы установить, нужно использовать
В React 18 появится новое API для библиотек. Для поддержки конкурентного рендеринга сторонними библиотеками было добавлено следующее API:
- useId – хук для генерации уникального id на клиенте и сервере, поддерживающего гидратацию. Подробнее.
- useSyncExternalStore – хук для работы с внешними хранилищами, позволяющий производить параллельное чтение из источника и синхронную запись. Подробнее.
- useInsertionEffect – хук для вставки стилей в процессе рендера, предназначен для CSS-in-JS библиотек. Подробнее.
Новые изменения в строгом режиме (strict mode). В будущем React планирует поддерживать пользовательский UI, в котором части интерфейса можно будет удалить с сохранением стейта, чтобы потом их можно было восстановить. Например, переключение табов на странице, когда при смене таба нужный компонент будет отображаться сразу с восстановленным состоянием.
Для поддержки такого UI сценария React добавляет новую проверку в development режиме в strict mode. Эта новая проверка будет автоматически демонтировать и повторно монтировать каждый компонент всякий раз, когда компонент монтируется в первый раз, восстанавливая предыдущее состояние при втором монтировании.
Также в React 18 прекращается поддержка браузера Internet Explorer.
https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
Версия React 18 стала доступна в качестве релиз-кандидата. Чтобы установить, нужно использовать
@rc тег:
npm install react@rc react-dom@rc
// или
yarn add react@rc react-dom@rc
В React 18 появится новое API для библиотек. Для поддержки конкурентного рендеринга сторонними библиотеками было добавлено следующее API:
- useId – хук для генерации уникального id на клиенте и сервере, поддерживающего гидратацию. Подробнее.
- useSyncExternalStore – хук для работы с внешними хранилищами, позволяющий производить параллельное чтение из источника и синхронную запись. Подробнее.
- useInsertionEffect – хук для вставки стилей в процессе рендера, предназначен для CSS-in-JS библиотек. Подробнее.
Новые изменения в строгом режиме (strict mode). В будущем React планирует поддерживать пользовательский UI, в котором части интерфейса можно будет удалить с сохранением стейта, чтобы потом их можно было восстановить. Например, переключение табов на странице, когда при смене таба нужный компонент будет отображаться сразу с восстановленным состоянием.
Для поддержки такого UI сценария React добавляет новую проверку в development режиме в strict mode. Эта новая проверка будет автоматически демонтировать и повторно монтировать каждый компонент всякий раз, когда компонент монтируется в первый раз, восстанавливая предыдущее состояние при втором монтировании.
Также в React 18 прекращается поддержка браузера Internet Explorer.
https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
GitHub
Intent to Ship: useId · reactwg/react-18 · Discussion #111
This feature is now available in the latest alphas facebook/react#22644 useId is an API for generating unique IDs on both the client and server, while avoiding hydration mismatches. We haven't ...
👍7
История React
На канале uidotdev вышло видео об истории React, о том как он возник в 2013 году и стал тем, чем является сейчас.
https://www.youtube.com/watch?v=Wm_xI7KntDs
На канале uidotdev вышло видео об истории React, о том как он возник в 2013 году и стал тем, чем является сейчас.
https://www.youtube.com/watch?v=Wm_xI7KntDs
YouTube
The Story of React
This is the story of how React took over the world.
👍3
Структура проекта React от Джошуа Комо
В React нет единого подхода к организации структуры проекта, поэтому у многих начинающих разработчиков возникает вопрос, как правильно? Один из советов Дэна Абрамова – “перемещайте файлы, пока не почувствуете, что это правильно”.
Джошуа Комо поделился своей структурой проекта, которую он использует на всех своих проектах. Основные особенности этой структуры:
- Использование абсолютного импорта.
- Название файла по имени компонента.
- Хранение файлов в папках по функциям, а не по фичам.
- Хранение хуков, констант и хелперов для компонента в отдельных файлах рядом.
https://www.joshwcomeau.com/react/file-structure/
В React нет единого подхода к организации структуры проекта, поэтому у многих начинающих разработчиков возникает вопрос, как правильно? Один из советов Дэна Абрамова – “перемещайте файлы, пока не почувствуете, что это правильно”.
Джошуа Комо поделился своей структурой проекта, которую он использует на всех своих проектах. Основные особенности этой структуры:
- Использование абсолютного импорта.
- Название файла по имени компонента.
- Хранение файлов в папках по функциям, а не по фичам.
- Хранение хуков, констант и хелперов для компонента в отдельных файлах рядом.
https://www.joshwcomeau.com/react/file-structure/
👎15👍9
Как проектировалось мидлвар подписки для Redux Toolkit
В Redux Toolkit 1.8 вышло новое API
В своем блоге один из разработчиков Redux Toolkit, Марк Эриксон, рассказал об истории данного API и этапах его разработки. Разработка данной фичи была начата 2.5 года назад и потребовала много итераций, чтобы определить, какие варианты использования он должен охватывать, как должен выглядеть общедоступный API и как реализовать функциональность.
В основе у Redux есть несколько основных библиотек для работы с сайд эффектами:
- Thunks: отправить экшен, получить (dispatch, getState) в аргументах и выполнить любую логику внутри функции.
- Sagas: напишите функцию генератор, которая на экшен вызывает сайд эффект функцию.
- Observables: напишите RxJs пайплайн, который на экшен вызывает сайд эффект функцию.
По умолчанию в Redux Toolkit был выбран Thunks, как самый простой вариант работы с сайд эффектами. При разработке API
https://blog.isquaredsoftware.com/2022/03/designing-rtk-listener-middleware/
В Redux Toolkit 1.8 вышло новое API
createListenerMiddleware для подписки на отправку экшенов или изменения стейта. Это API должно стать более простой альтернативой использования вместо более популярных saga или observable.
// Create the middleware instance and methods
const listenerMiddleware = createListenerMiddleware()
// Add one or more listener entries that look for specific actions.
// They may contain any sync or async logic, similar to thunks.
listenerMiddleware.startListening({
actionCreator: todoAdded,
effect: async (action, listenerApi) => {
// Run whatever additional side-effect-y logic you want here
console.log('Todo added: ', action.payload.text)
// Can cancel other running instances
listenerApi.cancelActiveListeners()
// Run async logic
const data = await fetchData()
// Pause until action dispatched or state changed
if (await listenerApi.condition(matchSomeAction)) {
// Use the listener API methods to dispatch, get state,
// unsubscribe the listener, start child tasks, and more
listenerApi.dispatch(todoAdded('Buy pet food'))
listenerApi.unsubscribe()
}
},
})
В своем блоге один из разработчиков Redux Toolkit, Марк Эриксон, рассказал об истории данного API и этапах его разработки. Разработка данной фичи была начата 2.5 года назад и потребовала много итераций, чтобы определить, какие варианты использования он должен охватывать, как должен выглядеть общедоступный API и как реализовать функциональность.
В основе у Redux есть несколько основных библиотек для работы с сайд эффектами:
- Thunks: отправить экшен, получить (dispatch, getState) в аргументах и выполнить любую логику внутри функции.
- Sagas: напишите функцию генератор, которая на экшен вызывает сайд эффект функцию.
- Observables: напишите RxJs пайплайн, который на экшен вызывает сайд эффект функцию.
По умолчанию в Redux Toolkit был выбран Thunks, как самый простой вариант работы с сайд эффектами. При разработке API
createListenerMiddleware команда Redux Toolkit хотела отделить экшены и сайд эффекты, т.е. смотрела в сторону redux-saga. Однако по сложности пользовательского API была цель сделать его близким к redux-thunk.https://blog.isquaredsoftware.com/2022/03/designing-rtk-listener-middleware/
Mark's Dev Blog
Idiomatic Redux: Designing the Redux Toolkit Listener Middleware
A dive into how we designed the API for the new RTK listener middleware
👍5
Тинькофф представил React фреймворк tramvai
Компания Тинькофф выложила в opensource свой React фреймворк для создания SSR приложений tramvai. Фреймворк похож на node.js фреймворк Nest.js, в нем также есть DI и модули.
Главная особенность фреймворка – очень большое количество уже готовых библиотек, которая создает целую экосистему, с помощью которой можно создавать enterprise приложения. В качестве отдельных модулей есть роутер, библиотека для тестирования, стейт менеджер, логгер и другие. Все модули подключаются к приложению через DI.
Выглядит очень необычно. Будет ли пользоваться спросом данный фреймворк где-то за пределами проектов Тинькофф – вопрос интересный.
https://tramvai.dev/
https://habr.com/ru/post/655953/
Компания Тинькофф выложила в opensource свой React фреймворк для создания SSR приложений tramvai. Фреймворк похож на node.js фреймворк Nest.js, в нем также есть DI и модули.
Главная особенность фреймворка – очень большое количество уже готовых библиотек, которая создает целую экосистему, с помощью которой можно создавать enterprise приложения. В качестве отдельных модулей есть роутер, библиотека для тестирования, стейт менеджер, логгер и другие. Все модули подключаются к приложению через DI.
Выглядит очень необычно. Будет ли пользоваться спросом данный фреймворк где-то за пределами проектов Тинькофф – вопрос интересный.
https://tramvai.dev/
https://habr.com/ru/post/655953/
👍14👎1
Аналоги Storybook
Storybook предназначен для помощи в разработке и тестировании компонентов в изолированной среде. Также в Storybook можно хранить примеры использования компонентов и документацию по компонентам.
Если вас не устраивает Storybook, то можно обратить внимание на аналоги:
React Cosmos
- Песочница как в Storybook. Возможность разработки компонентов в изоляции.
- Помощь в организации библиотеки компонентов. Возможность установки любых пропсов для компонентов.
- Удобный интерфейс. Есть возможность просмотра компонента в разных размерах окна.
React Styleguidist
- Автогенерация документации. Интерактивные примеры.
- Возможность написания примеров в Markdown разметке.
- Удобен для создания документации библиотеки компонентов.
Ladle
- Создан как замена Storybook разработчиками из Uber. Можно использовать в уже существующем проекте с историями Storybook.
- Production сборка проекта в 4 раза быстрее чем Storybook. Использует code splitting для разделения историй.
- Позволяет сохранять состояние компонента в URL – полезно для тестирования.
Storybook предназначен для помощи в разработке и тестировании компонентов в изолированной среде. Также в Storybook можно хранить примеры использования компонентов и документацию по компонентам.
Если вас не устраивает Storybook, то можно обратить внимание на аналоги:
React Cosmos
- Песочница как в Storybook. Возможность разработки компонентов в изоляции.
- Помощь в организации библиотеки компонентов. Возможность установки любых пропсов для компонентов.
- Удобный интерфейс. Есть возможность просмотра компонента в разных размерах окна.
React Styleguidist
- Автогенерация документации. Интерактивные примеры.
- Возможность написания примеров в Markdown разметке.
- Удобен для создания документации библиотеки компонентов.
Ladle
- Создан как замена Storybook разработчиками из Uber. Можно использовать в уже существующем проекте с историями Storybook.
- Production сборка проекта в 4 раза быстрее чем Storybook. Использует code splitting для разделения историй.
- Позволяет сохранять состояние компонента в URL – полезно для тестирования.
reactcosmos.org
React Cosmos
Sandbox for developing and testing UI components in isolation.
👍8
Критический путь рендеринга
Критический путь рендеринга – это шаги от получения браузером HTML и до отрисовки страницы пользователю. Для того, чтобы этот процесс был быстрым, необходима оптимизация этих шагов.
При парсинге HTML браузер строит DOM дерево, для CSS строится CSSOM дерево. Если при парсинге HTML будет обнаружен JS, то он будет выполнен (если это не модуль или нет атрибута defer). Стили и JS скрипты являются блокирующими для парсера ресурсами, что может сказаться на времени критического пути рендеринга.
Чтобы ускорить время критического пути рендеринга, нужно делать оптимизацию:
- Сократить CSS ресурсы для первоначальной загрузки. Стили, которые не нужны для просмотра текущей страницы, можно загрузить после.
- Используйте ленивую загрузку. Разделяйте страницы сайта на части.
- Используйте Async, Defer, Preload для скриптов.
- Кэширование ресурсов. Можно использовать заголовки ETag, Cache-Control, Last-Modified, Expires для валидации кэша в браузере, а также ServiceWorker для ручного кэширования нужных ресурсов.
При разработке на React также стоит соблюдать правила оптимизации:
- Используйте lazy loading роуты.
- Условный рендер компонентов. Если компонент тяжелый и ,например, открывается по клику на кнопку, то можно загружать его по потребности.
https://indepth.dev/posts/1498/101-javanoscript-critical-rendering-path
Критический путь рендеринга – это шаги от получения браузером HTML и до отрисовки страницы пользователю. Для того, чтобы этот процесс был быстрым, необходима оптимизация этих шагов.
При парсинге HTML браузер строит DOM дерево, для CSS строится CSSOM дерево. Если при парсинге HTML будет обнаружен JS, то он будет выполнен (если это не модуль или нет атрибута defer). Стили и JS скрипты являются блокирующими для парсера ресурсами, что может сказаться на времени критического пути рендеринга.
Чтобы ускорить время критического пути рендеринга, нужно делать оптимизацию:
- Сократить CSS ресурсы для первоначальной загрузки. Стили, которые не нужны для просмотра текущей страницы, можно загрузить после.
- Используйте ленивую загрузку. Разделяйте страницы сайта на части.
- Используйте Async, Defer, Preload для скриптов.
- Кэширование ресурсов. Можно использовать заголовки ETag, Cache-Control, Last-Modified, Expires для валидации кэша в браузере, а также ServiceWorker для ручного кэширования нужных ресурсов.
При разработке на React также стоит соблюдать правила оптимизации:
- Используйте lazy loading роуты.
- Условный рендер компонентов. Если компонент тяжелый и ,например, открывается по клику на кнопку, то можно загружать его по потребности.
https://indepth.dev/posts/1498/101-javanoscript-critical-rendering-path
👍8❤1
Релиз React 18
На npm появилась стабильная 18 версия React.
В новой версии React появился автоматический батчинг, новое API, такое как startTransition, потоковый серверный рендер с использованием Suspense и другие улучшения.
Многие новые фичи в React 18 сделаны на основе нового конкурентного рендеринга. Особенность в том, что конкурентный рендеринг включается только тогда, когда используются фичи из его набора.
Также появились новые хуки:
- useId для генерации уникального ID на клиенте и сервере, чтобы избежать проблем с гидратацией.
- useTransition и startTransition для несрочных изменений стейта.
- useDeferredValue для несрочного рендера значений.
https://reactjs.org/blog/2022/03/29/react-v18.html
На npm появилась стабильная 18 версия React.
В новой версии React появился автоматический батчинг, новое API, такое как startTransition, потоковый серверный рендер с использованием Suspense и другие улучшения.
Многие новые фичи в React 18 сделаны на основе нового конкурентного рендеринга. Особенность в том, что конкурентный рендеринг включается только тогда, когда используются фичи из его набора.
Также появились новые хуки:
- useId для генерации уникального ID на клиенте и сервере, чтобы избежать проблем с гидратацией.
- useTransition и startTransition для несрочных изменений стейта.
- useDeferredValue для несрочного рендера значений.
https://reactjs.org/blog/2022/03/29/react-v18.html
react.dev
React v18.0 – React
The library for web and native user interfaces
🔥13