TL;DR
Context и Redux — это одно и тоже?
Нет. Это разные инструменты, делающие разные вещи и используемые в разных целях.
Является ли контекст инструментом «управления состоянием»?
Нет. Контекст — это форма внедрения зависимостей (dependency injection). Это транспортный механизм, который ничем не управляет. Любое «управление состоянием» осуществляется вручную, как правило, с помощью хуков useState()/useReducer().
Являются ли Context и useReducer() заменой Redux?
Нет. Они в чем-то похожи и частично пересекаются, но сильно отличаются в плане возможностей.
Когда следует использовать контекст?
Когда вы хотите сделать некоторые данные доступными для нескольких компонентов, но не хотите передавать эти данные в виде пропов на каждом уровне дерева компонентов.
Когда следует использовать Context и useReducer()?
Когда вам требуется управление состоянием умеренно сложного компонента в определенной части приложения.
Когда следует использовать Redux?
Redux наиболее полезен в следующих случаях:
- Большое количество компонентов с состояниями, в которых используются одни и те же данные
- Состояние приложение часто обновляется
- Сложная логика обновления состояния
- Приложение имеет среднюю или большую кодовую базу и над ним работает много людей
- Вы хотите знать когда, почему и как обновляется состояние приложения и иметь возможность визуализировать эти изменения
- Вам требуются более мощные возможности по управлению побочными эффектами, стабильностью (постоянством) и сериализацией данных