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
Expandamos la aplicación, de modo que las notas se almacenen en el backend. Usaremos [json-server](/es/part2/getting_data_from_server), de la parte 2.
11
+
Expandamos la aplicación, de modo que las notas se almacenen en el backend. Usaremos [json-server](/es/part2/obteniendo_datos_del_servidor), de la parte 2.
12
12
13
13
14
14
El estado inicial de la base de datos se almacena en el archivo <i>db.json</i>, que se coloca en la raíz del proyecto:
@@ -51,6 +51,8 @@ y agregue la siguiente línea a la parte de <i>scripts</i> del archivo <i>packag
51
51
52
52
Ahora iniciemos json-server con el comando _npm run server_.
53
53
54
+
### Obteniendo datos del backend
55
+
54
56
A continuación, crearemos un método en el archivo <i>services/notes.js</i>, que usa <i>axios</i> para obtener datos del backend
55
57
56
58
```js
@@ -75,96 +77,169 @@ npm install axios
75
77
Cambiaremos la inicialización del estado en <i>noteReducer</i>, de modo que por defecto no haya notas:
76
78
77
79
```js
78
-
constnoteReducer= (state= [], action) => {
80
+
constnoteSlice=createSlice({
81
+
name:'notes',
82
+
initialState: [], // highlight-line
79
83
// ...
80
-
}
84
+
})
85
+
```
86
+
87
+
También agreguemos una nueva acción <em>appendNote</em> para añadir un objeto de una nota:
Una forma rápida de inicializar el estado en función de los datos en el servidor es buscar las notas en el archivo <i>index.js</i> y enviar la acción <i>NEW\_NOTE</i> para cada una de ellas:
130
+
Una manera rápida para inicializar el estado de las notas basado en los datos recibidos del backend es extraer las notas en el archivo <i>index.js</i> y enviar (dispatch) una acción usando <em>appendNote</em> para cada nota individual:
Agreguemos soporte en el reducer para la acción <i>INIT\_NOTES</i>, con el cual se puede realizar la inicialización enviando una sola acción. Creemos también una función de creador de acciones _initializeNotes_.
155
+
Enviar (dispatching) múltiples acciones parece un poco impráctico. Agreguemos un creador de acciones <em>setNotes</em> que se puede usar para reemplazar directamente el array de notas. Obtendremos el creador de acciones de la función <em>createSlice</em> implementando la acción <em>setNotes</em>:
> **NB:** ¿por qué no usamos await en lugar de promesas y controladores de eventos (registrados en _then_ métodos)?
148
223
>
149
224
>Await solo funciona dentro de funciones <i>async</i>, y el código en <i>index.js</i> no está dentro de una función, por lo que debido a la naturaleza simple de la operación, esta vez nos abstendremos de usar <i>async</i>.
150
225
151
226
Sin embargo, decidimos mover la inicialización de las notas al componente <i>App</i> y, como es habitual al obtener datos de un servidor, usaremos <i>effect hook</i>.
@@ -221,6 +296,8 @@ Generalmente, deshabilitar eslint cuando genera una advertencia no es una buena
221
296
222
297
Más sobre la necesidad de definir las dependencias de los hooks en la [documentación de react](https://reactjs.org/docs/hooks-faq.html#is-it-safe-to-omit-functions-from-the-list-of-dependencies).
223
298
299
+
### Enviando datos al backend
300
+
224
301
Podemos hacer lo mismo cuando se trata de crear una nueva nota. Expandamos el código comunicándonos con el servidor de la siguiente manera:
225
302
226
303
```js
@@ -248,7 +325,6 @@ export default {
248
325
El método _addNote_ del componente <i>NewNote</i> cambia ligeramente:
Debido a que el backend genera ids para las notas, cambiaremos el creador de la acción _createNote_
354
+
Debido a que el backend genera ids para las notas, cambiaremos el creador de la acción <em>createNote</em> en el archoivo <i>noteReducer.js</i> de la siguiente manera:
279
355
280
356
```js
281
-
exportconstcreateNote= (data) => {
282
-
return {
283
-
type:'NEW_NOTE',
284
-
data,
285
-
}
286
-
}
357
+
constnoteSlice=createSlice({
358
+
name:'notes',
359
+
initialState: [],
360
+
reducers: {
361
+
createNote(state, action) {
362
+
state.push(action.payload) // highlight-line
363
+
},
364
+
// ..
365
+
},
366
+
})
287
367
```
288
368
289
369
El cambio de importancia de las notas podría implementarse utilizando el mismo principio, lo que significa realizar una llamada de método asincrónico al servidor y luego enviar una acción apropiada.
290
370
291
-
El estado actual del código para la aplicación se puede encontrar en [github](https://github.com/fullstack-hy2020/redux-notes/tree/part6-3) en la rama <i>part6-3</i>.
371
+
El estado actual del código para la aplicación se puede encontrar en [Github](https://github.com/fullstack-hy2020/redux-notes/tree/part6-3) en la rama <i>part6-3</i>.
292
372
293
373
</div>
294
374
295
375
<divclass="tasks">
296
376
297
-
### Ejercicios 6.13.-6.14.
377
+
### Ejercicios 6.14.-6.15.
298
378
299
-
#### 6.13 Anécdotas y el backend, paso 1
379
+
#### 6.14 Anécdotas y el backend, paso 1
300
380
301
381
Cuando la aplicación se inicie, obtenga las anécdotas del backend implementado usando json-server.
302
382
303
383
Como datos de backend iniciales, puede usar, por ejemplo, [esto](https://github.com/fullstack-hy2020/misc/blob/master/anecdotes.json).
304
384
305
385
306
-
#### 6.14 Anécdotas y el backend, paso 2
386
+
#### 6.15 Anécdotas y el backend, paso 2
307
387
308
388
Modificar la creación de nuevas anécdotas, de forma que las anécdotas se almacenen en el backend.
0 commit comments