Как структурировать мои хранилища и работать с вложенными данными?

#vue.js #vuex

#vue.js #vuex

Вопрос:

Я чувствую, что у меня проблемы с пониманием / использованием Vuex должным образом. Я понимаю основы ит между действиями, некоторые операции для выполнения, которые могут вызывать или не вызывать методы мутации, и мутации, которые непосредственно изменяют состояние.

Я борюсь с тем, как структурировать мои хранилища. Краткий контекст, я хотел бы иметь возможность создавать, обновлять записи, а также выполнять такие действия, как (комментирование, оценка, редактирование и т.д.) Для конкретной записи.

Пример структуры post

 post:
    id: UUID
    content: String
    user: [Object] <- nested
    images: [[String]]
    rating_avg: Float
    rating_count: Int
    created: Datetime
  

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

Теперь я хочу иметь возможность комментировать или оценивать пост, но где мне это сделать? Если я хочу повторно использовать хранилище каналов, мне просто нужно указать.posts.find(… postID …) затем мутацию для комментирования или оценки, создать ли мне отдельное хранилище для управления действиями, связанными с сообщениями, или я просто добавлю эту логику в сам компонент, который потенциально разделит будущие действия на сочетание нескольких компонентов и / или хранилищ.

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

Некоторый контекст для использования на стороне клиента:

Он действует как лента (список сообщений), вы можете видеть основную информацию, заголовок, контент, количество просмотров, рейтинг. Некоторые быстрые действия, которые вы можете выполнить, такие как оценка, комментирование.

Когда вы оцениваете что-либо, серверная часть ответит с помощью rating_avg и rating_count, которые должны обновить информацию о рейтинге в конкретном сообщении, которое было оценено.

Я обнаружил, что

   [SET_POST_RATING_AVERAGE](state, { post, rating }) {
    Vue.set(post, "rating_average", rating);
  },
  

смог сделать то, что хотел, но это не кажется правильным. По мере усложнения объекта управлять мутацией будет сложно.

Комментарии:

1. TL: DR но если вам нужно скопировать вложенный объект для вашего хранилища, я бы посоветовал вам использовать Lodash package (_)

2. ну, на самом деле это не та проблема, с которой у меня возникают проблемы, и есть много способов сделать это. Я просто не понимаю, как следует обращаться с вложенными объектами в настройках Vuex.