Обновление данных в SPA

Здравствуйте, форумчане!
Есть вопрос по работе с SPA (Vue).
Ситуация:

  1. С бд забираю список пользователей (например 20 пользователей) в массив Все пользователи.
  2. При загрузке на странице на основе массива Все пользователи формируются два массива пользователей: невыбранные пользователи и выбранные пользователи. Выбранные пользователи формируются на основе некоего шаблона, в котором указано 5 пользователей. Остальные 15 попадают в невыбранных.
  3. У пользователя имеется возможность дополнить список выбранных пользователей путем:
    • перетаскивания из невыбранных
    • добавлением нового пользователя.

Вопрос:
Как правильно добавить нового пользователя, чтобы не сбросить уже выбранных пользователей? Какой порядок действий надо совершить?

Как вижу решение:
Асинхронным запросом добавить пользователя в бд.
Вернуть запись о вновь добавленном пользователе.
Добавить эту запись в массив Все пользователи.

По идее Vue должен сам обновить соответствующие массивы и новый пользователь должен попасть в Невыбранные пользователи.

Все ли моменты я учел?

1 лайк

Это очень интересный вопрос. Я недавно думал о подобном. Я бы сделал API в котором спрашиваю списки пользователей. И после каждого действия обновлял бы состояние виджета с пользователями из этого API. Более того виджет бы инициализировал из этого API. Получится единственный поток информации.

Проблема с твоим подходом, что как только появится еще один способ добавления/изменения пользователей тебе придется реализовывать его в 2 местах: на сервере и на клиенте. По сути ты держишь 2 состояния: на клиенте список пользователей и обновляешь его по действию пользователя и на сервере в БД. Если вопросы производительности не стоят, то так мне кажется было бы проще.


Моя задача стояла так: есть список тегов. Он собирается из списка изображений. Список тегов может поменяться если

  • любому из изображений добавили тег
  • изображение добавили/удалили/сделали публичным

Соответственно чем держать состояние тегов на клиенте и пытаться синхронизировать его, я запрашиваю список тегов после каждой операции которая может повлиять на список тегов.

Поведение можно глянуть тут: https://mm.dmitrypodgorniy.com/ (жми кнопку демо аккаунт)
Подход с точки зрения кода тут: https://github.com/podgorniy/media-manager/blob/master/src/client/app-state.ts#L561

Спасибо за идею. По окончании реализации обязательно отпишусь как сделал и с чем столкнулся.

@Anton_Kolyadin что там с окончанием реализации, что получилось?

Это мой pet-проект. Пока застрял на бэкенде