На картинке 3 ситуации:
— Никогда не спредьте всё подряд в корень
— Лишние атрибуты → лишние баги
— Чётко указывайте только то, что действительно нужно в DOM
#hotfix #react
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍5👾2
  История Prerender — как простой сервис для индексации JS-сайтов вырос в SaaS с органическим ростом и стабильной выручкой.
Обзор книги Милесии МакГрегор: переход от middle к senior, работа с legacy, архитектурные решения в NestJS и React, DevOps-подходы и важность soft-skills.
Перевод статьи о том, как работает реактивная библиотека без виртуального DOM: сигналы, эффекты, прокси-хранилища и ловушки вроде деструктуризации пропсов.
#read_watch #js #react
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤5👍3
  ⚛️ React 19.2 — что нового
Свежий релиз уже на npm.
Главные фишки:
📌 Плюс: обновлён eslint-plugin-react-hooks v6, поддержка Web Streams в SSR и мелкие багфиксы.
🔗  Подробности — в блоге React
🐸  Библиотека фронтендера
#stack #react
Свежий релиз уже на npm.
Главные фишки:
<Activity /> — новый способ управлять частями приложения (видимые/скрытые активности, предзагрузка скрытых страниц).
useEffectEvent — решение для «ивентов» внутри эффектов без лишних перезапусков.
cacheSignal — для React Server Components, помогает правильно завершать кэшированные запросы.
Performance Tracks — новые треки в Chrome DevTools для анализа производительности.
Partial Pre-rendering — частичный пререндеринг: статику можно отдать с CDN, а динамику дорисовать позже.
📌 Плюс: обновлён eslint-plugin-react-hooks v6, поддержка Web Streams в SSR и мелкие багфиксы.
#stack #react
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤6🔥2
  — Не создавайте функции прямо в JSX
— Используйте useCallback при передаче хендлеров в дочерние компоненты
— Особенно критично для списков и больших UI
#hotfix #react
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🤔7👍5🔥3😁2❤1
  Пошаговое руководство по симуляции солнца, дождя, снега и грозы в интерактивном трехмерном приложении для прогноза погоды.
Автор показывает, что за красивым синтаксисом скрываются подводные камни специфичности и неожиданные баги, из-за которых старые добрые keyframes по-прежнему оказываются надёжнее.
#read_watch #react #js #ts
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤3🔥1
  Иногда одна мелочь рушит весь интерфейс. Компонент внезапно сбрасывает состояние и анимации — а виноват всего один key. Раньше использовался
Math.random(), и React каждый раз считал, что элементы новые.В итоге он пересоздавал их с нуля — с потерей состояния и лагами.
Как решить проблему:
 item.id. Теперь React спокойно обновляет только то, что реально изменилось.#hotfix #react
Please open Telegram to view this post
    VIEW IN TELEGRAM
  😁10🥱8❤2👍2🤔1
  Вы жмёте кнопку, ждёте обновления, а в ответ — тишина. React не глючит — он просто решил подождать, пока вы нажмёте ещё раз.
— как именно React «пакует» несколько setState в один рендер
— когда batching работает, а когда — нет
— и зачем в редких случаях нужен
flushSync, если важно обновить прямо сейчас#under_hood #react
Please open Telegram to view this post
    VIEW IN TELEGRAM
  Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤4👍2🥰2
  Кажется, что всё просто: список, onClick — готово. Но при сотнях элементов каждый ререндер создаёт новые функции в JSX.
React считает их изменёнными и перерисовывает даже те строки, что не менялись.
На демо — незаметно. На проде — больно.
Каждый ререндер создаёт новые колбэки → React считает пропы изменёнными → перерисовывает.
useCallback стабилизирует ссылку, и компонент больше не «дёргается» без причины.
— Если список огромный — рендерьте только видимую часть (react-window, react-virtualized).
— Если элемент сложный — выносите его в memo-компонент с передачей колбэка через пропсы.
#hotfix #react
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤5🥰2🔥1
  Казалось бы, простой условный рендеринг. Но вот вам сюрприз.
Когда
items пустой массив, items.length равен 0. В JavaScript 0 — это falsy значение, поэтому выражение 0 && <ul> вернет 0.React рендерит числа, поэтому на экране появится цифра
0!function ProductList({ items }) {
  return (
    <div>
      <h2>Товары</h2>
      {items.length > 0 && <ul>
        {items.map(item => <li key={item.id}>{item.name}</li>)}
      </ul>}
    </div>
  );
}Или еще лучше:
{!!items.length && <ul>...</ul>}Или тернарный оператор:
{items.length ? <ul>...</ul> : null}
Оператор && возвращает первое falsy значение или последнее truthy:
0 && <Component /> → вернет 0 (React рендерит!)
false && <Component /> → вернет false (React не рендерит)
true && <Component /> → вернет <Component />
React не рендерит: false, null, undefined, true
React рендерит: числа (0, 1, -1), строки, компоненты
#hotfix #react
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤5🥰2😁2
  Эксперимент разработчика, который переписал фронт для Telegram-ботов на Rust и разобрался, где язык реально выигрывает у JS.
Medium-разбор, почему XSS, CSP и supply-chain атаки всё ещё ломают SPA, и как встроить безопасность в CI/CD.
Автор показывает реальные кейсы, обходные пути и поднимает важный вопрос: имеет ли фреймворк право на полный контроль над DOM?
#read_watch #react #js #ts
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🥰5🔥1
  Кажется, простой счётчик — но React со своим batching (см. на картинке).
Ждём
React группирует (batch) обновления состояния внутри одного события. Обе строки читают старое значение count из замыкания, поэтому результат — 1.
Если новое состояние зависит от предыдущего — используйте функциональное обновление
setCount(prev => prev + 1);
setCount(prev => prev + 1);
Теперь результат будет 2.
React работает по снимкам состояния, а не по «живым» переменным — и именно это часто сбивает с толку.
#hotfix #react
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🥰6👍1
  