Несколько дней назад, мы написали пост о приближающихся изменениях в наших lifecycle-методах, где также затронули стратегию постепенной миграции (обновления). В React 16.3.0 мы добавили несколько новых lifecycle-методов для помощи в этой миграции. Мы также предоставили новое API для давно ожидаемых новшеств: официальное context API, ref forwarding API и ergonomic ref API. Много лет React предлагал экспериментальное API для работы с контекстом. Пусть это и была мощная "штука", использование такого API было под угрозой, так как мы всё хотели заменить "экспериментальное" API. Версия 16.3 представляет новое context API, которое эффективнее и поддерживает сразу как проверку статичных типов (static type checking) так и глубокие обновления (deep updates). Ниже пример, в котором показано как можно "прокинуть" тему оформления (theme), используя новое API: Больше о context API здесь. React предоставлял два способа управления refs: указание ref обычной строкой и callback-вызов. Хотя и указание ref просто в качестве строки было удобнее, это имело несколько минусов и поэтому мы рекомендовали использовать вариант с callback'ом. Версия 16.3 добавляет новую опцию для управления refs, которая предлагает удобство указания ref в виде строки без недочетов: Больше о createRef API здесь. Компоненты высшего порядка (или HOC) — удобный инструмент для "переиспользования" кода между компонентами. Если взять за основу предыдущий пример с context, мы можем создать HOC в который "прокинем" theme в качестве свойства (props): Мы можем использовать этот HOC, чтобы связывать компоненты со свойствами темы оформления (theme) из контекста (context) без использования ThemeContext напрямую. Для примера: Обычно HOC'и прокидывают свойства (props) в компонент, который они оборачивают. К сожалению, refs не прокидываются. Это значит, что мы не можем прикрепить ref к FancyButton когда используем FancyThemedButton. Выходит, вызвать focus() невозможно. forwardRef API решает эту проблему, предлагая перехватить ref и послать его дальше как обычное свойство. API создания компонентов с помощью class практически не изменялось несколько лет. Однако, мы добавили поддержку новых "фич" (таких как error boundaries или будущий async rendering mode) к которым данная модель была не готова как следует. Например, с текущим API очень просто заблокировать начальную отрисовку компонента (initial render) несущественной логикой. Отчасти, это связано с тем, что существует несколько вариантов для решения поставленных задач, и поэтому выбрать лучший не просто. Мы заметили, что обработке ошибок часто не уделяется внимание и это может приводить к утечкам памяти (что в свою очередь пагубно скажется в будущем на асинхронной отрисовке (async rendering mode)). Текущее class API так же осложняет другие наши задумки, например работу над прототпированием React компилятора. Большинство из таких проблем связано со следующими lifecycle-методами: componentWillMount,  componentWillReceiveProps и ComponentWillUpdate. Так же эти методы вносят наибольшую путаницу в React коммьюнити. Поэтому, мы собираемся отказаться них в пользу лучшей альтернативы. Конечно, мы понимаем, что такие изменения затронут огромное количество существующих компонентов. Поэтому миграция будет постепенной настолько, насколько это возможно. Мы также предложим пути отступления (У нас в Facebook — 50,000 компонентов. Мы так же нуждаемся в постепенном обновлении). В дополнении к будущим "deprecated" методам жизненного цикла, мы добавили парочку новых: Больше об изменении в lifecycle здесь. StrictMode — это инструмент для нахождения потенциальных проблем в вашем приложении. Как и Fragment, StrictMode визуально не отрисовывается. Этот компонент активирует дополнительные проверки и предупреждения. Несмотря на то, что невозможно поймать все проблемные места (например, некоторые типы мутаций), StrictMode компонент поможет во многих ситуациях. Если вы видите предупреждения в "строгом режиме" (strict mode), значит скорее всего у вас будут баги в асинхронном режиме отрисовки (async rendering mode). В версии 16.3, StrictMode умеет: Дополнительный функционал будет добавлен в будущих релизах React. Больше о StrictMode здесь. Провожу вебинары, разрабатываю на заказ (react)