Last updated
Last updated
Vuex использует единое дерево состояния — когда один объект содержит всё глобальное состояние приложения и служит «единственным источником истины». Это также означает, что в приложении будет только одно такое хранилище. Единое дерево состояния позволяет легко найти нужную его часть или делать снимки текущего состояния приложения в целях отладки.
Поскольку хранилище Vuex реактивно, самый простой способ «получения» — просто вернуть часть состояния хранилища в вычисляемом(computed) свойстве:
Любые изменения store.state.count
вызовут перерасчёт вычисляемого(computed) свойства и запуск связанных с ним обновлений DOM.
Но этот способ заставляет компонент полагаться на синглтон глобального хранилища. При использовании модульной системы, это потребует импортировать хранилище в каждом компоненте, который использует его состояние, а также усложнит тестирование компонента.
Vuex предоставляет механизм «внедрения» хранилища во всех дочерних компонентах корневого компонента, у которого указана опция store
(включается в Vue.use(Vuex)
):
Указывая опцию store
в корневом экземпляре, мы обеспечиваем доступ к хранилищу во всех дочерних компонентах через this.$store
. Давайте обновим реализацию Counter
:
mapState
Когда компонент должен использовать множество свойств или геттеров хранилища, объявлять все эти вычисляемые свойства может быть утомительно. В таких случаях можно использовать функцию mapState
, которая автоматически генерирует вычисляемые свойства:
Можно передавать массив строк в mapState
, когда имя сопоставляемого вычисляемого свойства совпадает с именем в дереве состояний:
mapState
возвращает объект, что бы использовать его в сочетании с другими локальными вычисляемыми свойствами можно воспользоваться оператором распространения объектов `...
: