PassFront
  1. PassFront
  2. База знаний
  3. React 18+

Что изменилось в 17 версии React?

React 18+

React 17 (октябрь 2020) — знаменитый релиз «без новых фич»: никаких новых API для разработчиков. Все изменения — внутренние, ради упрощения будущих миграций.

Главные изменения

Новая система событий. Делегированные обработчики переехали с document на корневой контейнер приложения (элемент из createRoot/render). Зачем:

  • несколько React-приложений (в т.ч. разных версий) на одной странице перестали конфликтовать обработчиками;
  • проще интеграция с не-React кодом (jQuery-обработчики, микрофронтенды);
  • поведение ближе к нативному (например, e.stopPropagation() в внешнем коде теперь корректно останавливает React-события).

Также: убран event pooling (события перестали переиспользоваться — можно обращаться к event асинхронно), onScroll больше не всплывает, onFocus/onBlur переведены на нативные focusin/focusout.

Новый JSX-трансформ (вместе с Babel/TS): JSX компилируется в jsx() из react/jsx-runtime вместо React.createElement — стало не нужно писать `import React from 'react'` в каждом файле; чуть меньше бандл.

Постепенные обновления как стратегия. React 17 сделан «мостом»: страница может нести React 17 и, скажем, встроенный виджет на будущей версии. Плюс подготовка к конкурентным фичам: очистка устаревших внутренностей, предупреждения для UNSAFE_-методов.

Прочее: cleanup эффектов стал выполняться асинхронно (и строго до следующего эффекта); стек ошибок компонентов стал информативнее.

Коротко для собеседования

React 17 — технический релиз без новых API: события делегируются на корень приложения (совместимость нескольких React на странице, лучшее сосуществование с внешним кодом), убран event pooling, введён новый JSX-трансформ (import React больше не нужен). Смысл релиза — плавный мост к React 18.

Другие вопросы раздела