|
@@ -2,7 +2,7 @@
|
|
|
|
|
|
<div class="scrimba"><a href="https://scrimba.com/p/pnyzgAP/cqKK4psq" target="_blank" rel="noopener noreferrer">Пройдите этот урок на Scrimba</a></div>
|
|
|
|
|
|
-Из-за использования единого дерева состояния, все глобальные данные приложения оказываются помещены в один большой объект. По мере роста приложения, хранилище может существенно раздуться.
|
|
|
+Благодаря использованию единого дерева состояния, все состояния приложения содержатся внутри одного большого объекта. Однако, по мере роста и масштабировании приложения, хранилище может существенно раздуться.
|
|
|
|
|
|
Чтобы помочь в этой беде, Vuex позволяет разделять хранилище на **модули**. Каждый модуль может содержать собственное состояние, мутации, действия, геттеры и даже встроенные подмодули — структура фрактальна:
|
|
|
|
|
@@ -31,7 +31,7 @@ store.state.a // -> состояние модуля `moduleA`
|
|
|
store.state.b // -> состояние модуля `moduleB`
|
|
|
```
|
|
|
|
|
|
-### Локальное состояние модулей
|
|
|
+## Локальное состояние модулей
|
|
|
|
|
|
Первым аргументом, который получает мутации и геттеры, будет **локальное состояние модуля**.
|
|
|
|
|
@@ -83,7 +83,7 @@ const moduleA = {
|
|
|
};
|
|
|
```
|
|
|
|
|
|
-### Пространства имён
|
|
|
+## Пространства имён
|
|
|
|
|
|
По умолчанию действия, мутации и геттеры внутри модулей регистрируются в **глобальном пространстве имён** — это позволяет нескольким модулям реагировать на тот же тип мутаций/действий.
|
|
|
|
|
@@ -134,7 +134,7 @@ const store = new Vuex.Store({
|
|
|
|
|
|
Геттеры и действия с собственным пространством имён будут получать свои локальные `getters`, `dispatch` и `commit`. Другими словами, вы можете использовать содержимое модуля без написания префиксов в том же модуле. Переключения между пространствами имён не влияет на код внутри модуля.
|
|
|
|
|
|
-#### Доступ к глобальному содержимому в модулях со своим пространством имён
|
|
|
+### Доступ к глобальному содержимому в модулях со своим пространством имён
|
|
|
|
|
|
Если вы хотите использовать глобальное состояние и геттеры, `rootState` и `rootGetters` передаются 3-м и 4-м аргументами в функции геттеров, а также как свойства в объекте `context`, передаваемом в функции действий.
|
|
|
|
|
@@ -176,7 +176,7 @@ modules: {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-#### Регистрация глобального действия в модуле с собственным пространством имён
|
|
|
+### Регистрация глобального действия в модуле с собственным пространством имён
|
|
|
|
|
|
Если вы хотите зарегистрировать глобальное действие в модуле с собственным пространством имён, вы можете пометить его с помощью `root: true` и поместить определение действия в функцию `handler`. Например:
|
|
|
|
|
@@ -202,7 +202,7 @@ modules: {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-#### Подключение с помощью вспомогательных функций к пространству имён
|
|
|
+### Подключение с помощью вспомогательных функций к пространству имён
|
|
|
|
|
|
Подключение модуля со своим пространством имён к компонентам с помощью вспомогательных функций `mapState`, `mapGetters`, `mapActions` и `mapMutations` это может выглядеть подобным образом:
|
|
|
|
|
@@ -268,7 +268,7 @@ export default {
|
|
|
};
|
|
|
```
|
|
|
|
|
|
-#### Уточнение для разработчиков плагинов
|
|
|
+### Уточнение для разработчиков плагинов
|
|
|
|
|
|
Вас может обеспокоить непредсказуемость пространства имён для ваших модулей, когда вы создаёте [плагин](plugins.md) с собственными модулями и возможностью пользователям добавлять их в хранилище Vuex. Ваши модули будут также помещены в пространство имён, если пользователи плагина добавляют ваши модули в модуль со своим пространством имён. Чтобы приспособиться к этой ситуации, вам может потребоваться получить значение пространства имён через настройки плагина:
|
|
|
|
|
@@ -284,7 +284,7 @@ export function createPlugin(options = {}) {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-### Динамическая регистрация модулей
|
|
|
+## Динамическая регистрация модулей
|
|
|
|
|
|
Вы можете зарегистрировать модуль уже и **после** того, как хранилище было создано, используя метод `store.registerModule`:
|
|
|
|
|
@@ -312,13 +312,13 @@ store.registerModule(['nested', 'myModule'], {
|
|
|
|
|
|
Обратите внимание, что можно проверить, зарегистрирован ли уже модуль с заданным именем с помощью метода `store.hasModule(moduleName)`.
|
|
|
|
|
|
-#### Сохранение состояния
|
|
|
+### Сохранение состояния
|
|
|
|
|
|
Вероятно, вы хотите сохранить предыдущее состояние при регистрации нового модуля, например сохранить состояние из приложения с рендерингом на стороне сервера. Вы можете этого добиться с помощью опции `preserveState`: `store.registerModule('a', module, { preserveState: true })`.
|
|
|
|
|
|
При использовании `preserveState: true` модуль регистрируется, действия, мутации и геттеры добавляются в хранилище, а состояние нет. Предполагается, что состояние вашего хранилища уже содержит состояние для этого модуля и нет необходимости его перезаписывать.
|
|
|
|
|
|
-### Повторное использование модулей
|
|
|
+## Повторное использование модулей
|
|
|
|
|
|
Иногда нам может потребоваться создать несколько экземпляров модуля, например:
|
|
|
|