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: src/content/8/es/part8b.md
+21-43Lines changed: 21 additions & 43 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -80,7 +80,7 @@ La respuesta del servidor se imprime en la consola:
80
80
81
81

82
82
83
-
La aplicación puede comunicarse con un servidor GraphQL usando el objeto _client_. Se puede hacer que el cliente sea accesible para todos los componentes de la aplicación empaquetando el componente <i>App</i> con [ApolloProvider](https://www.apollographql.com/docs/react/get-started/#connect-your-client-to-react).
83
+
La aplicación puede comunicarse con un servidor GraphQL usando el objeto *client*. Se puede hacer que el cliente sea accesible para todos los componentes de la aplicación empaquetando el componente <i>App</i> con [ApolloProvider](https://www.apollographql.com/docs/react/get-started/#connect-your-client-to-react).
84
84
85
85
```js
86
86
importReactfrom'react'
@@ -148,9 +148,7 @@ const App = () => {
148
148
exportdefaultApp
149
149
```
150
150
151
-
<!-- Hook-funktion _useQuery_ kutsuminen suorittaa parametrina annetun kyselyn. Hookin kutsuminen palauttaa olion, joka -->
152
-
<!-- jolla en [useita kenttiä] (https://www.apollographql.com/docs/react/api/react/hooks/#result). Kenttä <i> cargando </i> en arvoltaan tosi, jos kyselyyn ei ole saatu vielä vastausta. Tässä tilanteessa renderöitävä koodi on -->
153
-
Cuando se llama, _useQuery_ realiza la consulta que recibe como parámetro.
151
+
Cuando se llama, *useQuery* realiza la consulta que recibe como parámetro.
154
152
Devuelve un objeto con varios [campos](https://www.apollographql.com/docs/react/api/react/hooks/#result).
155
153
El campo <i>loading</i> es verdadero si la consulta aún no ha recibido una respuesta.
<!-- Komponentti _App_ siis hoitaa edelleen kyselyn ja välittää tuloksen uuden komponentin renderöitäväksi: -->
192
-
El componente _App_ aún realiza la consulta y pasa el resultado al nuevo componente que se va a representar:
189
+
El componente *App* aún realiza la consulta y pasa el resultado al nuevo componente que se va a representar:
193
190
194
191
```js
195
192
constApp= () => {
@@ -248,8 +245,7 @@ También es posible realizar consultas con parámetros con GraphQL Playground. L
248
245
249
246

250
247
251
-
<!-- Pregunte käyttämämme _useQuery_ toimii hyvin tilanteissa, joissa kysely sobre tarkoitus suorittaa heti komponentin renderöinnin yhteydessä. Nyt kuitenkin haluamme tehdä kyselyn vasta siinä vaiheessa kun käyttäjä haluaa nähdä jonkin henkilön tiedot, eli kysely tehdään vasta [sitä tarvittaessa] (https://www.apollographql.com/docs.0-queries/#v3ta ejecutar consultas manualmente). -->
252
-
El hook _useQuery_ es adecuado para situaciones en las que la consulta se realiza cuando se procesa el componente.
248
+
El hook *useQuery* es adecuado para situaciones en las que la consulta se realiza cuando se procesa el componente.
253
249
Sin embargo, ahora queremos realizar la consulta solo cuando un usuario desea ver los detalles de una persona específica, por lo que la consulta se realiza solo [según sea necesario](https://www.apollographql.com/docs/react/data/queries/#executing-queries-manually).
254
250
255
251
<!-- Tähän tilanteeseen sopii hook-funktio [useLazyQuery] (https://www.apollographql.com/docs/react/api/react/hooks/#uselazyquery). Komponentti <i> Personas </i> muuttuu seuraavasti: -->
<!-- Koodi en kasvanut paljon, ja kaikki lisäykset eivät ole täysin ilmeisiä. -->
330
325
El código ha cambiado bastante y todos los cambios no son completamente evidentes.
331
326
332
-
<!-- Jos henkilön yhteydessä olevaa nappia painetaan, suoritetaan klikkauksenkäsittelijä _showPerson_, joka tekee GraphQL-kyselyn henkilön tiedoista: -->
333
327
Cuando se hace clic en el botón "show address" de una persona, se hace clic en el controlador de eventos
334
-
_showPerson_, y realiza una consulta GraphQL para obtener los detalles de las personas:
328
+
*showPerson*, y realiza una consulta GraphQL para obtener los detalles de las personas:
<!-- Kyselyn muuttujalle _nameToSearch_ määritellään arvo kutsuttaessa. -->
347
-
La variable _nameToSearch_ de la consulta recibe un valor cuando se ejecuta la consulta.
340
+
La variable *nameToSearch* de la consulta recibe un valor cuando se ejecuta la consulta.
348
341
349
-
<!-- Kyselyn vastaus tulee muuttujaan _result_, ja sen arvo sijoitetaan komponentin tilan muutujaan _person_. Sijoitus tehdään _useEffect_-hookissa: -->
350
-
La respuesta de la consulta se guarda en la variable _result_, y su valor se guarda en el estado del componente _person_ en el hook _useEffect_.
342
+
La respuesta de la consulta se guarda en la variable *result*, y su valor se guarda en el estado del componente *person* en el hook *useEffect*.
351
343
352
344
```js
353
345
useEffect(() => {
@@ -357,16 +349,14 @@ useEffect(() => {
357
349
}, [result])
358
350
```
359
351
360
-
<!-- Hookin toisena parametrina en _result.data_, tämä saa aikaan sen, että hookin ensimmäisenä parametrina oleva funktio suoritetaan <i> aina kun kyselyssä haetaan uuden henkilön tiedot </i>. Jos päivitystä ei hoidettaisi kontrolloidusti hookissa, seuraisi ongelmia sen jälkeen kun yksittäisen henkilön näkymästä palataan kaikkien henkilöiden näkymään. -->
361
-
El segundo parámetro del hook es _result_, por lo que la función dada al hook como su segundo parámetro se ejecuta <i>cada vez que la consulta obtiene los detalles de una persona diferente</i>.
352
+
El segundo parámetro del hook es *result*, por lo que la función dada al hook como su segundo parámetro se ejecuta <i>cada vez que la consulta obtiene los detalles de una persona diferente</i>.
362
353
¿No manejaríamos la actualización de una manera controlada en un hook, volver de la vista de una sola persona a una lista de todas las personas causaría problemas?
363
354
364
-
Si el estado _person_ tiene un valor, en lugar de mostrar una lista de todas las personas, solo se muestran los detalles de una persona.
355
+
Si el estado *person* tiene un valor, en lugar de mostrar una lista de todas las personas, solo se muestran los detalles de una persona.
365
356
366
357

367
358
368
-
<!-- Yksittäisen henkilön näkymästä palataan kaikkien henkilöiden näkymään sijoittamalla tilan muuttujan _person_ arvoksi _null_. -->
369
-
Cuando un usuario quiere volver a la lista de personas, el estado _person_ se establece en _null_.
359
+
Cuando un usuario quiere volver a la lista de personas, el estado *person* se establece en *null*.
370
360
371
361
La solución no es la más ordenada posible, pero es lo suficientemente buena para nosotros.
<!-- Mutaatioiden tekemiseen sopivan toiminnallisuuden tarjoaa hook-funktio [useMutation] (https://www.apollographql.com/docs/react/api/ react / hooks / # usemutation). -->
418
407
La función hook [useMutation](https://www.apollographql.com/docs/react/api/react/hooks/#usemutation) proporciona la funcionalidad para realizar mutaciones.
419
408
420
-
<!-- Tehdään sovellukseen uusi komponentti uuden henkilön lisämiseen: -->
421
409
Creemos un nuevo componente para agregar una nueva persona al directorio:
422
410
423
411
```js
@@ -482,16 +470,14 @@ const PersonForm = () => {
482
470
exportdefaultPersonForm
483
471
```
484
472
485
-
<!-- Lomakkeen koodi en suoraviivainen, mielenkiintoiset rivit en korostettu. Mutación suorittava funktio saadaan luotua _useMutation_-hookin avulla. Hook palauttaa kyselyfunktion <i> taulukon </i> ensimmäisenä alkiona: -->
486
473
El código del formulario es sencillo y las líneas interesantes se han resaltado.
487
-
Podemos definir la función de mutación usando el hook-_useMutation_.
474
+
Podemos definir la función de mutación usando el hook-*useMutation*.
488
475
El hook devuelve una <i>matriz</i>, cuyo primer elemento contiene el resultado de la mutación.
<!-- Kyselyä tehtäessä määritellään kyselyn muuttujille arvot: -->
495
481
Las variables de consulta reciben valores cuando se realiza la consulta:
496
482
497
483
```js
@@ -532,7 +518,7 @@ La solución es simple, y cada vez que un usuario agrega una nueva persona, apar
532
518
533
519
El lado malo de la solución es todo el tráfico web inútil.
534
520
535
-
Otra manera fácil de mantener la caché sincronizada es usar el hook de _useMutation_, el parámetro [refetchQueries](https://www.apollographql.com/docs/react/api/react/hooks/#params-2) para definir que la consulta que busca a todas las personas se realice nuevamente cada vez que se cree una nueva persona.
521
+
Otra manera fácil de mantener la caché sincronizada es usar el hook de *useMutation*, el parámetro [refetchQueries](https://www.apollographql.com/docs/react/api/react/hooks/#params-2) para definir que la consulta que busca a todas las personas se realice nuevamente cada vez que se cree una nueva persona.
536
522
537
523
```js
538
524
constALL_PERSONS=gql`
@@ -565,7 +551,6 @@ Si deseas realizar varias consultas, puedes pasar varios objetos dentro de refet
565
551
566
552
Hay otras formas de actualizar la caché. Más sobre estos más adelante en esta parte.
567
553
568
-
<!-- Sovellukseen en tällä hetkellä määritelty kyselyjä komponenttien koodin sekaan. Eriytetään kyselyjen määrittely omaan tiedostoonsa <i> queries.js </i>: -->
569
554
Por el momento, en nuestro código, las consultas y el componente están definidos en el mismo lugar.
570
555
Separemos las definiciones de consulta en su propio archivo <i>queries.js</i>:
<!-- Jokainen komponentti importtaa tarvitsemansa kyselyt: -->
594
578
Luego, cada componente importa las consultas que necesita:
595
579
596
580
```js
@@ -610,9 +594,9 @@ Intentar crear una persona con datos no válidos provoca un error y toda la apli
610
594
611
595

612
596
613
-
Debemos manejar la excepción. Podemos registrar una función de manejo de errores en la mutación usando _onError_ [option](https://www.apollographql.com/docs/react/api/react/hooks/#params-2) del hook _useMutation_.
597
+
Debemos manejar la excepción. Podemos registrar una función de manejo de errores en la mutación usando *onError* [option](https://www.apollographql.com/docs/react/api/react/hooks/#params-2) del hook *useMutation*.
614
598
615
-
Registremos la mutación en un controlador de errores, que usa la función _setError_ que recibe como parámetro para establecer un mensaje de error:
599
+
Registremos la mutación en un controlador de errores, que usa la función *setError* que recibe como parámetro para establecer un mensaje de error:
El componente <i>PhoneForm</i> responsable del cambio es sencillo. El formulario tiene campos para el nombre de la persona y el nuevo número de teléfono, y llama a la función _changeNumber_. La función se realiza mediante el hook _useMutation_.
695
+
El componente <i>PhoneForm</i> responsable del cambio es sencillo. El formulario tiene campos para el nombre de la persona y el nuevo número de teléfono, y llama a la función *changeNumber*. La función se realiza mediante el hook *useMutation*.
713
696
Se han resaltado líneas interesantes en el código.
714
697
715
698
```js
@@ -773,17 +756,14 @@ Esto sucede porque cada persona tiene un campo de identificación de tipo <i>ID<
773
756
774
757
El código actual de la aplicación se puede encontrar en [Github](https://github.com/fullstack-hy2020/graphql-phonebook-frontend/tree/part8-4) branch <i>part8-4</i>.
775
758
776
-
<!-- Sovelluksessa sobre vielä pieni ongelma. Jos yritämme vaihtaa olemattomaan nimeen liittyvän puhelinnumeron, ei mitään näytä tapahtuvan. Syynä tälle on se, että jos nimeä vastaavaa henkilöä ei löydy, vastataan kyselyyn <i> null </i>: -->
777
759
Nuestra aplicación todavía tiene un pequeño defecto. Si intentamos cambiar el número de teléfono por un nombre que no existe, parece que no pasa nada.
778
760
Esto sucede porque si no se puede encontrar una persona con el nombre de pila, la respuesta de mutación es <i>nula</i>:
779
761
780
762

781
763
782
-
<!-- Koska kyseessä ei ole GraphQL: n kannalta virhetilanne, ei _onError_-virheenkäsittelijän rekisteröimisestä tässä tilanteessa hyötyä. -->
783
-
Para GraphQL esto no es un error, por lo que registrar un controlador de errores _onError_ no es útil.
764
+
Para GraphQL esto no es un error, por lo que registrar un controlador de errores *onError* no es útil.
784
765
785
-
<!-- Voimme generoida virheilmoituksen _useMutation_-hookin toisena parametrina palauttaman mutacion tuloksen kertovan olion _result_ avulla. -->
786
-
Podemos usar el campo _result_ devuelto por el hook _useMutation_ como su segundo parámetro para generar un mensaje de error.
766
+
Podemos usar el campo *result* devuelto por el hook *useMutation* como su segundo parámetro para generar un mensaje de error.
<!-- Jos henkilöä ei löytynt, eli kyselyn tulos _result.data.editNumber_ on _null_, asettaa komponentti propseina saamansa callback -funktion avulla sopivan virheilmoituksen. Virheilmoituksen asettamista kontrolloidaan jälleen useEffect-hookin avulla, eli virheviesti halutaan asetaa ainoastaan jos mutaation tulos _result.data_ muuttuu. -->
813
-
Si no se puede encontrar a una persona, o el _result.data.editNumber_ es _null_, el componente usa la función de devolución de llamada que recibió como props para establecer un mensaje de error adecuado.
814
-
Queremos configurar el mensaje de error solo cuando el resultado de la mutación _result.data_ cambie, por lo que usamos el hook useEffect para controlar la configuración del mensaje de error.
792
+
Si no se puede encontrar a una persona, o el *result.data.editNumber* es *null*, el componente usa la función de devolución de llamada que recibió como props para establecer un mensaje de error adecuado.
793
+
Queremos configurar el mensaje de error solo cuando el resultado de la mutación *result.data* cambie, por lo que usamos el hook useEffect para controlar la configuración del mensaje de error.
815
794
816
795
<!-- useEffect aiheuttaa ESLint-virheilmoituksen: -->
817
796
El uso de useEffect provoca una advertencia de ESLint:
@@ -831,8 +810,7 @@ useEffect(() => {
831
810
// highlight-end
832
811
```
833
812
834
-
<!-- Voisimme yrittää päästä varoituksesta eroon lisäämällä función _notify_ useEffectin toisena parametrina olevaan taulukkoon: -->
835
-
Podríamos intentar deshacernos de la advertencia agregando la función _setError_ al segundo arreglo de parámetros de useEffect:
813
+
Podríamos intentar deshacernos de la advertencia agregando la función *setError* al segundo arreglo de parámetros de useEffect:
836
814
837
815
```js
838
816
useEffect(() => {
@@ -844,7 +822,7 @@ useEffect(() => {
844
822
// highlight-end
845
823
```
846
824
847
-
Sin embargo, esta solución no funciona si la función _notify_ no está envuelta en una función [useCallback](https://reactjs.org/docs/hooks-reference.html#usecallback). Si no es así, el resultado es un bucle sin fin. Cuando el componente _App_ se rerenderiza después de haber retirado una notificación, un <i>nueva versión</i> de _notify_ se crea lo que hace que la función de efectos que se ejecute lo que provoca una nueva notificación y así sucesivamente una así sucesivamente...
825
+
Sin embargo, esta solución no funciona si la función &*notify* no está envuelta en una función [useCallback](https://reactjs.org/docs/hooks-reference.html#usecallback). Si no es así, el resultado es un bucle sin fin. Cuando el componente *App* se rerenderiza después de que se haya ocultado una notificación, una <i>nueva versión</i> de *notify* se crea lo que hace que la función de *useEffect* que se ejecute lo que provoca una nueva notificación y así sucesivamente una así sucesivamente...
848
826
849
827
El código actual de la aplicación se puede encontrar en [Github](https://github.com/fullstack-hy2020/graphql-phonebook-frontend/tree/part8-5) branch <i>part8-5</i>.
0 commit comments