Лучшие практики для написания тестов с использованием React Testing Library
В статье рассматриваются способы повышения качества тестов, написанных с использованием React Testing Library. Автор делится практическими советами, которые помогут вам писать более надежные и поддерживаемые тесты. Среди ключевых моментов:
- Как избегать тестирования реализаций и сосредотачиваться на поведении компонентов.
- Почему важно работать с пользовательскими событиями вместо прямого взаимодействия с DOM.
- Использование ARIA-атрибутов для более точного поиска элементов.
Эти подходы помогают создавать тесты, которые лучше отражают реальное использование компонентов и упрощают их сопровождение.
https://claritydev.net/blog/improving-react-testing-library-tests
✍️ @React_lib
В статье рассматриваются способы повышения качества тестов, написанных с использованием React Testing Library. Автор делится практическими советами, которые помогут вам писать более надежные и поддерживаемые тесты. Среди ключевых моментов:
- Как избегать тестирования реализаций и сосредотачиваться на поведении компонентов.
- Почему важно работать с пользовательскими событиями вместо прямого взаимодействия с DOM.
- Использование ARIA-атрибутов для более точного поиска элементов.
Эти подходы помогают создавать тесты, которые лучше отражают реальное использование компонентов и упрощают их сопровождение.
export const Form = ({ saveData }) => {
const [state, setState] = useState({
name: "",
email: "",
password: "",
confirmPassword: "",
conditionsAccepted: false,
});
const onFieldChange = (event) => {
let value = event.target.value;
if (event.target.type === "checkbox") {
value = event.target.checked;
}
setState({ ...state, [event.target.id]: value });
};
const onSubmit = (event) => {
event.preventDefault();
saveData(state);
};
return (
<form className="form" onSubmit={onSubmit}>
<div className="field">
<label>Name</label>
<input
id="name"
onChange={onFieldChange}
placeholder="Enter your name"
/>
</div>
<div className="field">
<label>Email</label>
<input
type="email"
id="email"
onChange={onFieldChange}
placeholder="Enter your email address"
/>
</div>
<div className="field">
<label>Password</label>
<input
type="password"
id="password"
onChange={onFieldChange}
placeholder="Password should be at least 8 characters"
/>
</div>
<div className="field">
<label>Confirm password</label>
<input
type="password"
id="confirmPassword"
onChange={onFieldChange}
placeholder="Enter the password once more"
/>
</div>
<div className="field checkbox">
<input type="checkbox" id="conditions" onChange={onFieldChange} />
<label>I agree to the terms and conditions</label>
</div>
<button type="submit">Sign up</button>
</form>
);
};
https://claritydev.net/blog/improving-react-testing-library-tests
✍️ @React_lib
This media is not supported in your browser
VIEW IN TELEGRAM
❌ Избегайте использования объектов в качестве зависимостей в
✅ Вместо этого используйте примитивные ключи
✍️ @React_lib
React.useEffect()
✅ Вместо этого используйте примитивные ключи
✍️ @React_lib
8 лучших практик проектирования компонентов React.js
React - одна из самых популярных библиотек JavaScript для создания пользовательских интерфейсов, и одна из причин ее популярности - компонентно-ориентированная архитектура. React поощряет создание пользовательского интерфейса на основе многократно используемых компонентов, что позволяет разработчикам создавать сложные пользовательские интерфейсы более эффективно.
https://dev.to/blossom/8-best-practices-for-reactjs-component-design-4jn5
✍️ @React_lib
React - одна из самых популярных библиотек JavaScript для создания пользовательских интерфейсов, и одна из причин ее популярности - компонентно-ориентированная архитектура. React поощряет создание пользовательского интерфейса на основе многократно используемых компонентов, что позволяет разработчикам создавать сложные пользовательские интерфейсы более эффективно.
https://dev.to/blossom/8-best-practices-for-reactjs-component-design-4jn5
✍️ @React_lib
Открытый урок «Оптимизация работы компонентов в React.js».
Когда: 29 января в 20:00 мск.
На вебинаре вы узнаете:
- Как работать с оптимизацией в React.js
- Особенности работы функциональных компонентов и хуков
- Трюк с мемоизацией коллбеков для списка элементов
Встречаемся в преддверии старта курса «React.js Developer» Otus.
Все участники вебинара получат специальную цену на обучение!
Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cHW678
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Когда: 29 января в 20:00 мск.
На вебинаре вы узнаете:
- Как работать с оптимизацией в React.js
- Особенности работы функциональных компонентов и хуков
- Трюк с мемоизацией коллбеков для списка элементов
Встречаемся в преддверии старта курса «React.js Developer» Otus.
Все участники вебинара получат специальную цену на обучение!
Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cHW678
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
React.js with typescript
#1 : Introduction to React.js
#2 : Creating React App
#3 : React Components
#4 : React Variables in Components
#5 : Styling in React
#6 : Using Buttons and Click Events
#7 : Usage of useState() hook
источник
✍️ @React_lib
#1 : Introduction to React.js
#2 : Creating React App
#3 : React Components
#4 : React Variables in Components
#5 : Styling in React
#6 : Using Buttons and Click Events
#7 : Usage of useState() hook
источник
✍️ @React_lib
This media is not supported in your browser
VIEW IN TELEGRAM
⚛️ Если вы используете
✍️ @React_lib
fetch()
в useEffect
, вам, вероятно, стоит посмотреть это короткое видео ✍️ @React_lib
React 19: что нового в самой популярной библиотеке для создания интерфейсов? Узнайте первыми!
Новые хуки, улучшения рефов, кастомные элементы — React становится ещё удобнее. И мы готовы рассказать, как использовать это на практике.
Хотите быть на пике технологий? На открытом вебинаре 6 февраля в 19:00 мск разберём, как применять нововведения React 19 в реальных проектах.
Все участники получат скидку на большое обучение «React.js Developer» — идеальный способ прокачать навыки.
Записаться: https://vk.cc/cI3bho
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Новые хуки, улучшения рефов, кастомные элементы — React становится ещё удобнее. И мы готовы рассказать, как использовать это на практике.
Хотите быть на пике технологий? На открытом вебинаре 6 февраля в 19:00 мск разберём, как применять нововведения React 19 в реальных проектах.
Все участники получат скидку на большое обучение «React.js Developer» — идеальный способ прокачать навыки.
Записаться: https://vk.cc/cI3bho
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Эффективное тестирование хуков React с помощью Vitest
В этой статье рассматривается использование Vitest и библиотеки React Testing Library для модульного тестирования хуков React таким образом, чтобы их было легко поддерживать и расширять.
https://mayashavin.com/articles/test-react-hooks-with-vitest
✍️ @React_lib
В этой статье рассматривается использование Vitest и библиотеки React Testing Library для модульного тестирования хуков React таким образом, чтобы их было легко поддерживать и расширять.
https://mayashavin.com/articles/test-react-hooks-with-vitest
✍️ @React_lib
This media is not supported in your browser
VIEW IN TELEGRAM
⚛️ Совет по React: Используйте пользовательский хук для управления состоянием массивов в ваших компонентах.
✍️ @React_lib
✍️ @React_lib
🔥Podlodka React Crew – онлайн-конференция для React-разработчиков.
И в новом сезоне ребята решили разобраться, какие инструменты и знания включают в роадмапы профессионального развития и насколько они применимы.
Что в программе:
💬 Говорим на одном языке с пользователями: i18n в React-приложениях – Виталий Баев, контрибьютор Next.js и Vite 🌍 Как выбрать инструменты и сделать интерфейс удобным для всех?
📡 OpenTelemetry для фронтенд-разработчика – Валерий Катцин, frontend-разработчик в Точке 📊 Как собирать данные о работе приложения и использовать их для улучшения продукта?
🔥 "Долгожданный" React 19 – Алекс Рассудихин, разработчик с опытом во Vue, React, Next и Astro 🚀 Какие фичи вышли в продакшен, а какие – нет?
🤖 AI Integrated Developer Experience – Марк Байдебура, Senior Full-stack Engineer в Influencer 🧠 Где AI реально помогает, а где пока его лучше не использовать?
📅 Конференция пройдет 10-14 февраля.
Ты не просто узнаешь по новые фичи и подходы, но и определишься, какие из них включить в свой roadmap и как расти дальше.
🔗 Регистрируйтесь: podlodka.io/reactcrew
И в новом сезоне ребята решили разобраться, какие инструменты и знания включают в роадмапы профессионального развития и насколько они применимы.
Что в программе:
💬 Говорим на одном языке с пользователями: i18n в React-приложениях – Виталий Баев, контрибьютор Next.js и Vite 🌍 Как выбрать инструменты и сделать интерфейс удобным для всех?
📡 OpenTelemetry для фронтенд-разработчика – Валерий Катцин, frontend-разработчик в Точке 📊 Как собирать данные о работе приложения и использовать их для улучшения продукта?
🔥 "Долгожданный" React 19 – Алекс Рассудихин, разработчик с опытом во Vue, React, Next и Astro 🚀 Какие фичи вышли в продакшен, а какие – нет?
🤖 AI Integrated Developer Experience – Марк Байдебура, Senior Full-stack Engineer в Influencer 🧠 Где AI реально помогает, а где пока его лучше не использовать?
📅 Конференция пройдет 10-14 февраля.
Ты не просто узнаешь по новые фичи и подходы, но и определишься, какие из них включить в свой roadmap и как расти дальше.
🔗 Регистрируйтесь: podlodka.io/reactcrew
Интерактивное руководство по рендерингу в React
В чистом виде React - это библиотека для построения пользовательских интерфейсов. Она настолько проста, что всю ментальную модель можно представить в виде формулы v = f(s) - где ваше представление является просто функцией вашего состояния.
Хотя это уравнение дает нам простую мысленную модель работы React, есть один аспект уравнения, который до сих пор, после стольких лет, кажется, смущает людей. Когда и как именно вызывается f? Или, говоря иначе, когда и как React обновляет представление?
Этой, казалось бы, простой теме посвящено множество постов в блогах, докладов на конференциях и сообщений в твиттере. И все же почему-то даже опытные разработчики React имеют некоторые (часто неизвестные) заблуждения на этот счет.
https://ui.dev/why-react-renders
✍️ @React_lib
В чистом виде React - это библиотека для построения пользовательских интерфейсов. Она настолько проста, что всю ментальную модель можно представить в виде формулы v = f(s) - где ваше представление является просто функцией вашего состояния.
Хотя это уравнение дает нам простую мысленную модель работы React, есть один аспект уравнения, который до сих пор, после стольких лет, кажется, смущает людей. Когда и как именно вызывается f? Или, говоря иначе, когда и как React обновляет представление?
Этой, казалось бы, простой теме посвящено множество постов в блогах, докладов на конференциях и сообщений в твиттере. И все же почему-то даже опытные разработчики React имеют некоторые (часто неизвестные) заблуждения на этот счет.
https://ui.dev/why-react-renders
✍️ @React_lib
This media is not supported in your browser
VIEW IN TELEGRAM
❌ Избегайте использования нескольких переменных состояния для отслеживания статуса.
✅ Вместо этого используйте перечисления (enums).
✍️ @React_lib
✅ Вместо этого используйте перечисления (enums).
✍️ @React_lib
🚀 Оптимизация React-приложения: 5 техник, которые работают
Сегодня расскажу вам, как можно ускорить работу React-приложения, если оно начинает тормозить.
1️⃣ Используйте React.memo
Если ваш компонент ререндерится без причины, оберните его в
2️⃣ Оптимизируйте контекст с useMemo и useCallback
Частая ошибка — передача в
3️⃣ Разбейте состояние на атомарные части
Часто программисты хранят весь стейт в одном
4️⃣ Динамическая подгрузка компонентов (Code Splitting)
Если у вас большое приложение, используйте
5️⃣ Используйте производительные списки
Если у вас много элементов (список в 1000+ элементов), используйте виртуализацию, например,
✍️ @React_lib
Сегодня расскажу вам, как можно ускорить работу React-приложения, если оно начинает тормозить.
1️⃣ Используйте React.memo
Если ваш компонент ререндерится без причины, оберните его в
React.memo()
. Это предотвратит ненужные перерисовки, если пропсы не изменились.
const OptimizedComponent = React.memo(({ data }) => {
return <div>{data}</div>;
});
2️⃣ Оптимизируйте контекст с useMemo и useCallback
Частая ошибка — передача в
useContext
сложных объектов без мемоизации. Используйте useMemo
и useCallback
для оптимизации.
const value = useMemo(() => ({ user, logout }), [user]);
3️⃣ Разбейте состояние на атомарные части
Часто программисты хранят весь стейт в одном
useState
, но лучше разбить его на части. Так обновление одной переменной не будет вызывать ререндер всего компонента.
const [name, setName] = useState("");
const [age, setAge] = useState(0);
4️⃣ Динамическая подгрузка компонентов (Code Splitting)
Если у вас большое приложение, используйте
React.lazy
для загрузки компонентов по требованию.
const LazyComponent = React.lazy(() => import("./BigComponent"));
5️⃣ Используйте производительные списки
Если у вас много элементов (список в 1000+ элементов), используйте виртуализацию, например,
react-window
или react-virtualized
.
import { FixedSizeList as List } from "react-window";
<List height={400} itemCount={items.length} itemSize={35}>
{({ index, style }) => <div style={style}>{items[index]}</div>}
</List>;
✍️ @React_lib
Вот отсортированная база с тонной материала (постепенно пополняется):
БАЗА (4687 видео/книг):
(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(114 видео, 77 книги) — Сисадмин
(107 видео, 43 книги) — BA/SA
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — Дизайн
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — 1С
(136 видео, 33 книги) — PM/HR
Скачивать ничего не нужно — все выложили в Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Оптимизация React-приложения: Код-сплиттинг с React.lazy
Сегодня расскажу о код-сплиттинге в React — мощном инструменте для ускорения загрузки приложения.
Когда наше приложение растёт, бандл становится тяжёлым, а время загрузки — длиннее. Решение? Код-сплиттинг. Он позволяет загружать только нужные компоненты, а не весь код сразу.
Как это работает?
Используем
📌 Пример:
Здесь
📍 Где это использовать?
✔ Ленивые модули
✔ Большие страницы (Dashboard, Profile)
✔ Админ-панели
✔ Карты, графики, таблицы
Но помни: React.lazy работает только для компонентов. Для остального кода (например, утилит) лучше использовать динамический импорт (
Попробуй внедрить код-сплиттинг в свой проект и скажи, насколько ускорилась загрузка! 🚀
✍️ @React_lib
Сегодня расскажу о код-сплиттинге в React — мощном инструменте для ускорения загрузки приложения.
Когда наше приложение растёт, бандл становится тяжёлым, а время загрузки — длиннее. Решение? Код-сплиттинг. Он позволяет загружать только нужные компоненты, а не весь код сразу.
Как это работает?
Используем
React.lazy()
и Suspense
, чтобы загружать компоненты только когда они реально нужны.📌 Пример:
import React, { lazy, Suspense } from 'react';
const HeavyComponent = lazy(() => import('./HeavyComponent'));
function App() {
return (
<div>
<h1>Главная страница</h1>
<Suspense fallback={<p>Загрузка...</p>}>
<HeavyComponent />
</Suspense>
</div>
);
}
export default App;
Здесь
HeavyComponent
загружается только тогда, когда он нужен, а пока он загружается — показывается fallback
.📍 Где это использовать?
✔ Ленивые модули
✔ Большие страницы (Dashboard, Profile)
✔ Админ-панели
✔ Карты, графики, таблицы
Но помни: React.lazy работает только для компонентов. Для остального кода (например, утилит) лучше использовать динамический импорт (
import()
).Попробуй внедрить код-сплиттинг в свой проект и скажи, насколько ускорилась загрузка! 🚀
✍️ @React_lib