@Mindgrow

Какие есть подходы при проектировании глобального хранилища состояний в React (ассинхронность)?

Внедряю в полной мере redux.
Все операции будут выполняться через слой экшнов. Соответственно добавляется ассинхронность. Раньше ассинхронности не было. Все вызовы выполнялись синхронно, что упрощало разработку и блокировало ui на время выполнения.

Ранее многих вопросов, связанных с ассинхронностью не возникало.
Теперь возникли.

1. Какие подходы, методики, паттерны есть для реализации взаимодействия между глобальным хранилищем и страницей?

2. Как разделить стейты? Я пришёл к тому, что у стейта есть аналогия с viewModel паттерна MVVM. View - это компонент, ViewModel - это стейт. Экшнами мы меняем VM, который сбинден с помощью хуков с компонентом. Соответственно делиться должно отталкиваясь от, того, что должно отображаться. Какие ещё могут быть советы?

3. Так как операции выполняются ассинхронно, нам надо информировать компонент о том, что выполняется загрузка или произошла ошибка во время загрузки.
Для этого обычно используются поля isLoading и error.
Всё хорошо. Но если в одном стейте, есть несколько сущностей, которые обрабатываются не зависимо, то получается что

3.1. isLoading используется на все операции, один и тот же. В таком случае если данные в одном стейте разнородные, то компонент может зря информироваться о загрузка. Допустим в стейте пользователь и категории, обновляем категории, а блокируется страница пользователя. Чего не должно быть. Получается надо делить стейт. Или какие идеи?

3.2. Если над одной сущностью мы можем выполнять несколько операций, допустим изменить имя и изменить возраст, то выполняя эти операции параллельно (например выполнение изменения имени задержалось и мы начали одновременно изменять другой параметр) - один isLoading приведёт к коллизиям. Получается стейт нужно дробить до экшна, иначе мы не сможем корректно выполнять несколько операций одновременно. Или как это решают?
  • Вопрос задан
  • 36 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы