|
@@ -8,14 +8,14 @@ Pour y remédier, Vuex nous permet de diviser notre store en **modules**. Chaque
|
|
|
|
|
|
``` js
|
|
``` js
|
|
const moduleA = {
|
|
const moduleA = {
|
|
- state: { ... },
|
|
|
|
|
|
+ state: () => ({ ... }),
|
|
mutations: { ... },
|
|
mutations: { ... },
|
|
actions: { ... },
|
|
actions: { ... },
|
|
getters: { ... }
|
|
getters: { ... }
|
|
}
|
|
}
|
|
|
|
|
|
const moduleB = {
|
|
const moduleB = {
|
|
- state: { ... },
|
|
|
|
|
|
+ state: () => ({ ... }),
|
|
mutations: { ... },
|
|
mutations: { ... },
|
|
actions: { ... }
|
|
actions: { ... }
|
|
}
|
|
}
|
|
@@ -37,7 +37,9 @@ Dans les mutations et accesseurs d'un module, le premier argument reçu sera **l
|
|
|
|
|
|
``` js
|
|
``` js
|
|
const moduleA = {
|
|
const moduleA = {
|
|
- state: { count: 0 },
|
|
|
|
|
|
+ state: () => ({
|
|
|
|
+ count: 0
|
|
|
|
+ }),
|
|
mutations: {
|
|
mutations: {
|
|
increment (state) {
|
|
increment (state) {
|
|
// `state` est l'état du module local
|
|
// `state` est l'état du module local
|
|
@@ -87,14 +89,14 @@ Par défaut, les actions, mutations et accesseurs à l'intérieur d'un module so
|
|
|
|
|
|
Si vous souhaitez que votre module soit autosuffisant et réutilisable, vous pouvez le ranger sous un espace de nom avec `namespaced: true`. Quand le module est enregistré, tous ses accesseurs, actions et mutations seront automatiquement basés sur l'espace de nom du module dans lesquels ils sont rangés. Par exemple :
|
|
Si vous souhaitez que votre module soit autosuffisant et réutilisable, vous pouvez le ranger sous un espace de nom avec `namespaced: true`. Quand le module est enregistré, tous ses accesseurs, actions et mutations seront automatiquement basés sur l'espace de nom du module dans lesquels ils sont rangés. Par exemple :
|
|
|
|
|
|
-```js
|
|
|
|
|
|
+``` js
|
|
const store = new Vuex.Store({
|
|
const store = new Vuex.Store({
|
|
modules: {
|
|
modules: {
|
|
account: {
|
|
account: {
|
|
namespaced: true,
|
|
namespaced: true,
|
|
|
|
|
|
// propriétés du module
|
|
// propriétés du module
|
|
- state: { ... }, // l'état du module est déjà imbriqué et n'est pas affecté par l'option `namespace`
|
|
|
|
|
|
+ state: () => ({ ... }), // l'état du module est déjà imbriqué et n'est pas affecté par l'option `namespace`
|
|
getters: {
|
|
getters: {
|
|
isAdmin () { ... } // -> getters['account/isAdmin']
|
|
isAdmin () { ... } // -> getters['account/isAdmin']
|
|
},
|
|
},
|
|
@@ -109,7 +111,7 @@ const store = new Vuex.Store({
|
|
modules: {
|
|
modules: {
|
|
// hérite de l'espace de nom du module parent
|
|
// hérite de l'espace de nom du module parent
|
|
myPage: {
|
|
myPage: {
|
|
- state: { ... },
|
|
|
|
|
|
+ state: () => ({ ... }),
|
|
getters: {
|
|
getters: {
|
|
profile () { ... } // -> getters['account/profile']
|
|
profile () { ... } // -> getters['account/profile']
|
|
}
|
|
}
|
|
@@ -119,7 +121,7 @@ const store = new Vuex.Store({
|
|
posts: {
|
|
posts: {
|
|
namespaced: true,
|
|
namespaced: true,
|
|
|
|
|
|
- state: { ... },
|
|
|
|
|
|
+ state: () => ({ ... }),
|
|
getters: {
|
|
getters: {
|
|
popular () { ... } // -> getters['account/posts/popular']
|
|
popular () { ... } // -> getters['account/posts/popular']
|
|
}
|
|
}
|
|
@@ -262,7 +264,7 @@ export default {
|
|
|
|
|
|
Vous devez faire attention au nom d'espace imprévisible pour vos modules quand vous créez un [plugin](./plugins.md) qui fournit les modules et laisser les utilisateurs les ajouter au store de Vuex. Vos modules seront également sous espace de nom si l'utilisateur du plugin l'ajoute sous un module sous espace de nom. Pour vous adapter à la situation, vous devez recevoir la valeur de l'espace de nom via vos options de plugin :
|
|
Vous devez faire attention au nom d'espace imprévisible pour vos modules quand vous créez un [plugin](./plugins.md) qui fournit les modules et laisser les utilisateurs les ajouter au store de Vuex. Vos modules seront également sous espace de nom si l'utilisateur du plugin l'ajoute sous un module sous espace de nom. Pour vous adapter à la situation, vous devez recevoir la valeur de l'espace de nom via vos options de plugin :
|
|
|
|
|
|
-```js
|
|
|
|
|
|
+``` js
|
|
// passer la valeur d'espace de nom via une option du plugin
|
|
// passer la valeur d'espace de nom via une option du plugin
|
|
// et retourner une fonction de plugin Vuex
|
|
// et retourner une fonction de plugin Vuex
|
|
export function createPlugin (options = {}) {
|
|
export function createPlugin (options = {}) {
|
|
@@ -311,11 +313,9 @@ C'est exactement le même problème qu'avec `data` dans un composant Vue. Ainsi
|
|
|
|
|
|
``` js
|
|
``` js
|
|
const MyReusableModule = {
|
|
const MyReusableModule = {
|
|
- state () {
|
|
|
|
- return {
|
|
|
|
- foo: 'bar'
|
|
|
|
- }
|
|
|
|
- },
|
|
|
|
|
|
+ state: () => ({
|
|
|
|
+ foo: 'bar'
|
|
|
|
+ }),
|
|
// mutations, actions, accesseurs...
|
|
// mutations, actions, accesseurs...
|
|
}
|
|
}
|
|
```
|
|
```
|