You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: en/data.md
+16-16
Original file line number
Diff line number
Diff line change
@@ -4,11 +4,11 @@
4
4
5
5
Pendant le SSR, nous allons essentiellement faire le rendu d'un « instantané » de notre application, aussi si votre application est liée à des données asynchrones, **ces données vont devoir être pré-chargées et résolues avant de débuter la phase de rendu**.
6
6
7
-
Un autre point important côté client, les mêmes données doivent être disponibles avant que l'application ne soit montée, autrement, l'application côté client va faire le rendu d'un état différent et l'hydratation va échouer.
7
+
Un autre point important côté client ; les mêmes données doivent être disponibles avant que l'application ne soit montée, autrement, l'application côté client va faire le rendu d'un état différent et l'hydratation va échouer.
8
8
9
-
Pour résoudre cela, les données pré-chargées doivent vivre en dehors de la vue du composant, dans un gestionnaire de données, ou dans un « gestionnaire d'état ». Côté serveur, nous pouvons pré-charger et remplir les données dans le gestionnaire de donnée avant le rendu. De plus, nous allons en sérialiser et en injecter l'état dans le HTML. Le gestionnaire de données côté client pourra directement récupérer l'état depuis le HTML avant que l'application ne soit montée.
9
+
Pour résoudre cela, les données pré-chargées doivent vivre en dehors de la vue du composant, dans un gestionnaire de données, ou dans un « gestionnaire d'état ». Côté serveur, nous pouvons pré-charger et remplir les données dans le gestionnaire de données avant le rendu. De plus, nous allons sérialiser et injecter l'état dans le HTML. Le gestionnaire de données côté client pourra directement récupérer l'état depuis le HTML avant que l'application ne soit montée.
10
10
11
-
Nous allons utiliser le gestionnaire d'état officiel (« store ») de la bibliothèque [Vuex](https://github.com/vuejs/vuex/) pour cette partie. Créons un fichier `store.js`, avec divers jeu de logique pour pré-charger un élément en nous basant sur un identifiant :
11
+
Nous allons utiliser le gestionnaire d'état officiel (« store ») de la bibliothèque [Vuex](https://github.com/vuejs/vuex/) pour cette partie. Créons un fichier `store.js`, avec divers jeux de logique pour pré-charger un élément en nous basant sur un identifiant :
12
12
13
13
```js
14
14
// store.js
@@ -28,7 +28,7 @@ export function createStore () {
28
28
},
29
29
actions: {
30
30
fetchItem ({ commit }, id) {
31
-
// retournant la Promesse via `store.dispatch()` nous savons
31
+
// retournant la Promesse via `store.dispatch()`, nous savons
32
32
// quand les données ont été pré-chargées
33
33
returnfetchItem(id).then(item=> {
34
34
commit('setItem', { id, item })
@@ -76,9 +76,9 @@ export function createApp () {
76
76
77
77
## Collocation logique avec les composants
78
78
79
-
Donc, ou devons nous appeler le code en charge de l'action de pré-chargement ?
79
+
Donc, où devons nous appeler le code en charge de l'action de pré-chargement ?
80
80
81
-
Les données que nous avons besoin de pré-charger sont déterminées par la route visitée, qui va aussi déterminée quel composant va être rendu. En fait, les données nécessaire a une route donnée sont aussi les données nécessaire au composant pour être rendu pour une route. Aussi il serait naturel de placer la logique de pré-chargement à l'intérieur des composants de route.
81
+
Les données que nous avons besoin de pré-charger sont déterminées par la route visitée, qui va aussi déterminer quels composants vont être rendus. En fait, les données nécessaires a une route donnée sont aussi les données nécessaires aux composants pour être rendus pour une route. Aussi il serait naturel de placer la logique de pré-chargement à l'intérieur des composants de route.
82
82
83
83
Nous allons exposer une fonction statique personnalisée `asyncData` sur nos composants de route. Notez que, puisque cette fonction va être appelée avant l'instanciation des composants, l'accès à `this` ne sera pas possible. Le store et les informations de route ont donc besoin d'être passés en tant qu'arguments :
84
84
@@ -91,12 +91,12 @@ Nous allons exposer une fonction statique personnalisée `asyncData` sur nos com
Dans `entry-server.js` nous pouvons obtenir des composants qu'ils concordent avec une route grâce à `router.getMatchedComponents()`, et appeler `asyncData` si le composant l'expose. Nous avons ensuite besoin d'attacher l'état résolue au contexte de rendu.
110
+
Dans `entry-server.js` nous pouvons obtenir les composants qui concordent avec une route grâce à `router.getMatchedComponents()`, et appeler `asyncData` si le composant l'expose. Nous avons ensuite besoin d'attacher l'état résolu au contexte de rendu.
111
111
112
112
```js
113
113
// entry-server.js
@@ -125,7 +125,7 @@ export default context => {
125
125
returnreject({ code:404 })
126
126
}
127
127
128
-
// appeler `asyncData()` sur toutes les routes concordant
128
+
// appeler `asyncData()` sur toutes les routes concordantes
129
129
Promise.all(matchedComponents.map(Component=> {
130
130
if (Component.asyncData) {
131
131
returnComponent.asyncData({
@@ -134,11 +134,11 @@ export default context => {
134
134
})
135
135
}
136
136
})).then(() => {
137
-
// Après que chaque hook de pré-chargement soit résolue, notre store est maintenant
137
+
// Après que chaque hook de pré-chargement soit résolu, notre store est maintenant
138
138
// rempli avec l'état nécessaire au rendu de l'application.
139
139
// Quand nous attachons l'état au contexte, et que l'option `template`
140
140
// est utilisée pour faire le rendu, l'état va automatiquement être
141
-
// sérialisé et injecté dans le HTML pour alimenter window.__INITIAL_STATE__.
141
+
//être sérialisé et injecté dans le HTML en tant que `window.__INITIAL_STATE__`.
142
142
context.state=store.state
143
143
144
144
resolve(app)
@@ -166,9 +166,9 @@ Côté client, il y a deux différentes approches pour gérer du pré-chargement
166
166
167
167
1.**Résoudre les données avant de changer de route :**
168
168
169
-
Avec cette stratégie, l'application va rester sur la vue courante jusqu'à ce que les données nécessaire à la vue suivante soient résolue. L'avantage est que la vue suivante pourra faire le rendu complet du contenu aussitôt qu'il sera prêt, mais si les données mettent trop de temps à charger, l'utilisateur va se sentir « bloquer » sur la vue courante. C'est pourquoi il est recommandé de fournir un indicateur de chargement si vous utilisez cette stratégie.
169
+
Avec cette stratégie, l'application va rester sur la vue courante jusqu'à ce que les données nécessaires à la vue suivante soient résolues. L'avantage est que la vue suivante pourra faire le rendu complet du contenu aussitôt qu'il sera prêt, mais si les données mettent trop de temps à charger, l'utilisateur va se sentir « bloquer » sur la vue courante. C'est pourquoi il est recommandé de fournir un indicateur de chargement si vous utilisez cette stratégie.
170
170
171
-
Nous pouvons implémenter cette stratégie côté client en vérifiant la concordance des composants et en exécutant leurs fonctions `asyncData` à l'intérieur du hook global du routeur. Notez que nous devrions enregistrer cette route après que la route initiale ne soit prête et donc il n'est pas nécessaire de pré-charger de nouveau les données du serveur ayant déjà été pré-chargées.
171
+
Nous pouvons implémenter cette stratégie côté client en vérifiant la concordance des composants et en exécutant leurs fonctions `asyncData` à l'intérieur du hook global du routeur. Notez que nous devrions enregistrer ce hook après que la route initiale ne soit prête et donc il n'est pas nécessaire de pré-charger de nouveau les données du serveur ayant déjà été pré-chargées.
172
172
173
173
```js
174
174
// entry-client.js
@@ -256,7 +256,7 @@ Vue.mixin({
256
256
257
257
## Scission de code du Store
258
258
259
-
Dans une grosse application, notre store vuex va très probablement être scinder dans de multiples modules. Bien sur, il est aussi possible de scinder le code de ces modules en fragments correspondant aux routes. Supposons que nous ayons le module store suivant :
259
+
Dans une grosse application, notre store Vuex va très probablement être scinder dans de multiples modules. Bien sur, il est aussi possible de scinder le code de ces modules en fragments correspondant aux routes. Supposons que nous ayons le module store suivant :
260
260
261
261
```js
262
262
// store/modules/foo.js
@@ -313,4 +313,4 @@ Parce que le module est maintenant une dépendance du composant de route, il peu
313
313
314
314
---
315
315
316
-
Fiou, Cela fait pas mal de code ! Cela est dû au fait que le pré-chargement universel est probablement le problème le plus complexe d'une application avec rendu côté serveur et nous avons poser les bases pour un développement futur plus simple. Maintenant que cette base est mise en place, modifier des composants individuellement sera en fait plutôt agréable.
316
+
Fiou, cela fait pas mal de code ! Cela est dû au fait que le pré-chargement universel est probablement le problème le plus complexe d'une application avec rendu côté serveur et nous avons poser les bases pour un développement futur plus simple. Maintenant que cette base est mise en place, modifier des composants individuellement sera en fait plutôt agréable.
0 commit comments