Как правильно построить приложение на vue?

Собственно, суть в том, что с сервера приходят 2 массива. Первый - массив клиентов в виде объектов. Второй - массив ключей (тоже в виде объектов), которые им принадлежат. Их надо вывести в таблице с раскладывающимися строками (в самой строке инфа про клиентов, в её "раскладной" части список их ключей). Таблица реализована как отдельный компонент. Но данные приходят в неподнохящем для неё виде, их нужно сформировать в один массив клиентов, где укаждого объекта клиента будет св-во expanded с массивом ключей. Собственно вопросы:

Где лучше и правильнее всего получать эти массивы клиентов и их ключей. В хранилище, в представлении страницы или в отдельном сервисе?
И где выполнять их "склейку"?
Где производить запрос на сервер с измененными данными из таблицы (таблица эммитит ивент изменения строки и подстроки)?
Правильно ли вообще писать методы в компоненте страницы (src/views в шаблоне)?
  • Вопрос задан
  • 243 просмотра
Пригласить эксперта
Ответы на вопрос 1
AlexeyCaTHaR
@AlexeyCaTHaR
Я бы реализовал получение данных только на той странице\компоненте где они необходимы. И в зависимости от этого было бы понятно, по какому-то событию на странице или в хуке необходимо получать данные.

Получение реализовал бы через action в хранилище. Что-то типа такого:
getClients ({ commit, dispatch }) {
    commit('setLoading', true) // preloader
    api.getClients ()
      .then((clients) => {
        commit('setClients', clients)
        dispatch('getKeys')
      })
      .finally(() => {
        commit('setLoading', false)
      })
  },
getKeys({ commit }) {
    commit('setLoading', true)
    api.getKeys()
      .then((keys) => {
        commit('setKeys', keys)
      })
      .finally(() => {
        commit('setLoading', false)
      })
  }

Соответственно на странице\компоненте вызывался только бы dispatch('getClients ').
А вот получение ключей каждого клиента в разворачиваемую область можно через computed реализовать. И не обязательно загружать будет все ключи, пока кто-то не развернул блок.

P.S> это всё только моё имхо на текущий момент
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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