Vue - использовать Vuex вместо Eventbus для расчетов с вложенными данными и компонентами - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть приложение, когда связывается большой JSON-объект с компонентом, затем некоторые части этого объекта с последующими компонентами и т. Д. - это структура со многими глубокими уровнями, но объект не копируется, я использую преимущество в том, что объекты передаются по ссылке.

Компоненты на самом низком уровне имеют такие поля, как «цена», «кол-во» и т. Д. Когда пользователь изменяет их, я обновляю объект и запускаю пересчет, используя глобальную шину событий - после того, как пересчет сделан, я также использую шину событий для принудительного обновления некоторых компонентов.,Например, их родители с полями цена / кв, чтобы обновить "общие" суммы в категориях.

Теперь я переместил некоторый код в vuex и рассмотрим также здесь.Думаю, что пересчет после коммита будет в порядке.Вопрос в том, как я могу изменить этот большой объект, используя коммит из дочерних компонентов?Проблема в том, что коммит должен «знать», какая часть объекта была изменена (например, один элемент внутри одной из многих категорий) ... Я могу сделать это другим способом, передать дочерние и родительские данные в коммит и обновить родителя, но... это будет работать?Мне также нужна ссылка, чтобы сделать это надлежащим образом ...

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

1 Ответ

0 голосов
/ 23 апреля 2019

Я думаю, у вас есть некоторые проблемы с архитектурой. Основная идея здесь состоит в том, чтобы иметь некоторый контейнерный (умный) компонент, который связан с хранилищем (vuex), и простые (глупые) компоненты, которые получают данные из реквизита. Также вы должны разделить свой магазин на модули, чтобы его было легко обслуживать. Этот подход позволит вам изменять именно те части данных, которые вы хотите.

...