Какие есть подходы при проектировании глобального хранилища состояний в React (ассинхронность)?
Внедряю в полной мере redux.
Все операции будут выполняться через слой экшнов. Соответственно добавляется ассинхронность. Раньше ассинхронности не было. Все вызовы выполнялись синхронно, что упрощало разработку и блокировало ui на время выполнения.
Ранее многих вопросов, связанных с ассинхронностью не возникало.
Теперь возникли.
1. Какие подходы, методики, паттерны есть для реализации взаимодействия между глобальным хранилищем и страницей?
2. Как разделить стейты? Я пришёл к тому, что у стейта есть аналогия с viewModel паттерна MVVM. View - это компонент, ViewModel - это стейт. Экшнами мы меняем VM, который сбинден с помощью хуков с компонентом. Соответственно делиться должно отталкиваясь от, того, что должно отображаться. Какие ещё могут быть советы?
3. Так как операции выполняются ассинхронно, нам надо информировать компонент о том, что выполняется загрузка или произошла ошибка во время загрузки.
Для этого обычно используются поля isLoading и error.
Всё хорошо. Но если в одном стейте, есть несколько сущностей, которые обрабатываются не зависимо, то получается что
3.1. isLoading используется на все операции, один и тот же. В таком случае если данные в одном стейте разнородные, то компонент может зря информироваться о загрузка. Допустим в стейте пользователь и категории, обновляем категории, а блокируется страница пользователя. Чего не должно быть. Получается надо делить стейт. Или какие идеи?
3.2. Если над одной сущностью мы можем выполнять несколько операций, допустим изменить имя и изменить возраст, то выполняя эти операции параллельно (например выполнение изменения имени задержалось и мы начали одновременно изменять другой параметр) - один isLoading приведёт к коллизиям. Получается стейт нужно дробить до экшна, иначе мы не сможем корректно выполнять несколько операций одновременно. Или как это решают?