useContext en 20 minutos

Garaje de ideas | Tech
10 Feb 202220:18

Summary

TLDREste video explica cómo usar el contexto en React para gestionar el estado global de una aplicación, desafiando la idea de que Redux es la única opción. Se muestra cómo crear un contexto, usar el Provider para compartir datos a través de la jerarquía de componentes y cómo encapsular el estado y las acciones en un 'user provider'. Además, se compara con Redux y se destaca cómo la utilización de hooks y context API puede mejorar el rendimiento y la estructura del código.

Takeaways

  • 😀 La biblioteca Redux no es la única opción para gestionar el estado global en aplicaciones React.
  • 🔧 React ofrece una herramienta nativa, el Context, que puede ayudar a gestionar estados globales de manera eficiente.
  • 🌐 Se aborda cómo usar el Context para compartir información entre componentes de diferentes niveles en una aplicación React.
  • 🛠 Se compara el uso de Redux con el Context y se sugiere que combinar el Context con un reducer puede emular la funcionalidad de Redux.
  • 📈 Se enfatiza la mejora en rendimiento al usar Context en lugar de Redux, ya que se utilizan herramientas nativas de React.
  • 👨‍🏫 Mario Girón, el presentador, explica paso a paso cómo crear y utilizar un Context en una aplicación React.
  • 🔑 Se destaca la importancia de mantener un estado global en aplicaciones grandes para compartir información a través de múltiples componentes.
  • 🏗 Se muestra cómo crear un Context desde cero y cómo inyectarlo en componentes para compartir datos a lo largo de la aplicación.
  • 🔄 Se explica cómo se pueden encapsular las acciones y el estado en un 'provider' para facilitar su uso en diferentes componentes.
  • 🔗 Se sugiere la posibilidad de combinar el uso de Context con otras herramientas o técnicas para mejorar aún más la gestión del estado en aplicaciones React.

Q & A

  • ¿Qué herramienta se menciona en el script como alternativa a Redux para gestionar el estado global en aplicaciones React?

    -El script menciona el contexto (Context) de React como una herramienta alternativa a Redux para gestionar el estado global en aplicaciones.

  • ¿Qué es un 'provider' en el contexto de React y cómo se utiliza?

    -Un 'provider' en React es un componente que permite pasar un contexto creado a través del árbol de componentes sin necesidad de asignarlo a cada componente manualmente. Se utiliza para inyectar datos o funciones a varios componentes a la vez.

  • ¿Cómo se crea un contexto en React y qué se utiliza para ello?

    -Se crea un contexto en React utilizando el método `createContext` proporcionado por la librería de React. Esto permite compartir datos a través del árbol de componentes.

  • ¿Qué es la función 'useState' en React y para qué se usa?

    -La función 'useState' es un hook en React que permite mantener el estado local en componentes funcionales. Se usa para definir un estado inicial y una función que permite actualizar ese estado.

  • ¿Cómo se puede acceder al estado y a las funciones definidas en un contexto creado en React?

    -Para acceder al estado y a las funciones definidas en un contexto creado en React, se utiliza el hook `useContext` y se le pasa el contexto creado anteriormente.

  • ¿Cuál es la ventaja de usar un contexto en React para compartir datos entre componentes?

    -La ventaja de usar un contexto en React es que permite compartir datos a lo largo de toda la aplicación sin necesidad de pasar props manualmente a través de cada componente, lo que simplifica el proceso y evita la propagación de props a través de múltiples niveles.

  • ¿Qué es un 'hook' en React y cómo se relaciona con el uso de contextos?

    -Un 'hook' en React es una función que permite usar estado y otras características de los componentes de clase en componentes funcionales. Se relaciona con el uso de contextos a través de los hooks `useContext` y `useReducer`, que facilitan el acceso y la manipulación del estado global.

  • ¿Cómo se puede encapsular el contexto y las funciones que lo modifican en un solo lugar para su uso en toda la aplicación?

    -Se puede encapsular el contexto y las funciones que lo modifican creando un 'provider' personalizado que inyecte ambos contextos y las funciones necesarias. Esto se logra exportando los contextos y las funciones desde un archivo centralizado y utilizando un componente que los inyecte en el árbol de componentes.

  • ¿Qué es la función 'useReducer' en React y cómo se compara con el uso de un contexto para gestionar el estado?

    -La función 'useReducer' es un hook en React que permite usar un reducer para gestionar el estado de una aplicación. Se compara con el uso de un contexto en que ambos permiten gestionar el estado global, pero 'useReducer' es especialmente útil para aplicaciones con estado complejo que requiere más control y lógica de actualización del estado.

  • ¿Cómo se puede mejorar el rendimiento de una aplicación React al usar contextos en lugar de bibliotecas externas como Redux?

    -El uso de contextos en lugar de bibliotecas externas como Redux puede mejorar el rendimiento de una aplicación React ya que evita la sobrecarga de dependencias adicionales y permite utilizar las herramientas nativas de React, lo que puede resultar en una aplicación más rápida y eficiente.

Outlines

00:00

🌐 Introducción al Context API en React

El vídeo comienza explicando que, aunque Redux es una librería popular para gestionar el estado global en aplicaciones React, no es la única opción. Se presenta el Context API como una herramienta nativa de React que puede ayudar a gestionar un estado más o menos global. Se enfatiza la importancia de compartir información entre componentes, especialmente en aplicaciones grandes con múltiples niveles de componentes. Se menciona que el Context API puede ser combinado con 'useReducer' para emular la funcionalidad de Redux, pero con mejor rendimiento. Se habla de la creación de un 'contexto' para compartir información a lo largo de toda la aplicación, empezando por una aplicación simple y explicando cómo se puede escalar utilizando 'createContext'.

05:00

🔄 Cómo utilizar el Context API para gestionar el estado

El vídeo sigue explicando cómo se puede utilizar el Context API para crear un estado global y cómo se puede acceder a él desde componentes hijos. Se muestra cómo crear un contexto con 'createContext' y cómo proveer ese contexto a otros componentes utilizando el 'Provider' componente. Se detalla el proceso de pasar un objeto de estado y una función para cambiar ese estado a través del contexto. Se menciona la creación de una función 'cambiarLogin' que cambia el estado del usuario y cómo se puede llamar a esta función para simular un login o logout.

10:01

📚 Creación de un Provider para encapsular el contexto

El vídeo explica cómo se puede encapsular el contexto y las funciones relacionadas con el estado del usuario dentro de un componente funcional llamado 'userProvider'. Se detalla cómo se pueden crear dos contextos, uno para el usuario y otro para la función que cambia el usuario. Se muestra cómo se pueden pasar estos contextos a otros componentes utilizando el 'Provider' y cómo se pueden aislar estos contextos para facilitar su uso en diferentes partes de la aplicación.

15:03

🔧 Mejores prácticas con custom hooks y providers

El vídeo avanza explicando cómo se pueden crear custom hooks para acceder al contexto y a las funciones de cambio de usuario, facilitando así su uso en cualquier componente. Se muestra cómo se pueden exportar estas funciones y cómo se pueden usar en componentes hijos para acceder al contexto y realizar cambios. Se resalta la importancia de encapsular la lógica de estado y acciones en un solo lugar para mantener el código limpio y organizado.

20:05

🎬 Conclusión y recursos adicionales

Para finalizar, el vídeo ofrece el código fuente en el repositorio para que los espectadores puedan seguir y modificar el ejemplo. Se invita a los espectadores a dejar sus preguntas en los comentarios y se recuerda la importancia de suscribirse, dar like y compartir el vídeo para ayudar al canal. Se anuncia que en el próximo vídeo se seguirá explicando temas relacionados.

Mindmap

Keywords

💡React

React es una biblioteca de JavaScript para construir interfaces de usuario, desarrollada y mantenida por Facebook. En el vídeo, se menciona que se va a hablar de cómo gestionar el estado global en aplicaciones de React, lo cual es un aspecto clave en el desarrollo de aplicaciones web modernas.

💡Redux

Redux es una librería de JavaScript que permite gestionar el estado de aplicaciones de manera predecible. En el vídeo, Redux se menciona para contrastar con el uso del contexto en React, destacando que no es la única opción para gestionar el estado global.

💡Contexto

El contexto en React es una característica que permite compartir datos a través de la jerarquía de componentes sin tener que pasar props manualmente a cada nivel. En el vídeo, se aborda cómo usar el contexto para gestionar un estado más o menos global dentro de la aplicación.

💡Estado Global

El estado global hace referencia a los datos que son accesibles desde cualquier componente en una aplicación. El vídeo trata sobre cómo usar el contexto de React para gestionar este tipo de estado, permitiendo así la comunicación entre componentes.

💡Provider

Provider es un componente de orden superior en React que permite pasar datos a través de la jerarquía de componentes. En el vídeo, se explica cómo usar el Provider para inyectar datos en el contexto y así hacerlos accesibles para los componentes.

💡Componentes Funcionales

Los componentes funcionales son una forma de crear componentes en React que se centran en la función de renderizado puro. En el vídeo se menciona que el uso del contexto puede ser más flexible con componentes funcionales.

💡Hooks

Los hooks son una característica introducida en React 16.8 que permite usar estado y otras características de los componentes de clase en componentes funcionales. En el vídeo, se habla de cómo usar hooks personalizados para encapsular el acceso al contexto.

💡createContext

createContext es una función en React que se usa para crear un nuevo contexto. En el vídeo, se menciona cómo usar createContext para crear un contexto que luego se puede consumir en otros componentes.

💡useContext

useContext es un hook en React que permite consumir un contexto en un componente funcional. En el vídeo, se explica cómo usar useContext para acceder al estado global desde un componente funcional.

💡Encapsulamiento

El encapsulamiento es un principio de programación que permite ocultar la implementación interna de un objeto o componente. En el vídeo, se habla de cómo encapsular el acceso al contexto y las acciones de cambio dentro de un 'user provider' para mantener un código limpio y organizado.

💡Rendimiento

El rendimiento se refiere a la eficiencia y velocidad a la que se ejecuta un programa o aplicación. En el vídeo, se sugiere que usar el contexto de React en lugar de Redux puede mejorar el rendimiento de la aplicación debido al uso de herramientas nativas de React.

Highlights

Redux no es la única librería para gestionar el estado global de aplicaciones en React.

React tiene una herramienta muy potente llamada Contexto para gestionar estados globales.

Se puede utilizar Contexto junto con el hook 'useReducer' para emular la funcionalidad de Redux.

El rendimiento de la aplicación mejora al usar Contexto en lugar de Redux ya que se utilizan herramientas nativas de React.

Se centra en la creación de un estado más o menos global para compartir información entre componentes.

Se explica cómo pasar información de padres a hijos a través de varias generaciones de componentes.

Se detalla cómo mantener un estado global a lo largo de toda la aplicación.

Se describe el proceso de creación de un contexto desde cero en una aplicación React.

Se menciona la importancia de no dejar el 'Provider' sin cerrar para mantener la jerarquía correcta.

Se explica cómo llamar a la función 'Provider' para pasar datos a cualquier componente dentro de la jerarquía.

Se muestra cómo crear una función para cambiar el estado del usuario y simular un login.

Se detalla cómo acceder al contexto en componentes funcionales usando el hook 'useContext'.

Se explica cómo se puede acceder al estado del usuario desde un componente hijo utilizando el contexto.

Se describe cómo se puede encapsular el contexto y las acciones en un 'Provider' para facilitar su uso en la aplicación.

Se sugiere la creación de un archivo 'userProvider' para encapsular el contexto y las acciones relacionadas con el usuario.

Se explica cómo se pueden generar dos contextos en el 'userProvider' y cómo inyectarlos en los componentes hijos.

Se detalla cómo se pueden crear funciones personalizadas para acceder al contexto del usuario y a la función de cambio de login.

Se muestra cómo se pueden utilizar estos hooks personalizados en lugar de llamar directamente a los contextos.

Se describe cómo se puede hacer la transición de usar directamente los contextos a utilizar los hooks personalizados en los componentes hijos.

Se explica cómo se puede generar un código más elegante y flexible al encapsular el contexto y las acciones en un 'Provider'.

Se sugiere la posibilidad de combinar el uso de Contexto con 'useReducer' para obtener una funcionalidad similar a Redux pero con mejor rendimiento.

Se invita a los espectadores a dejar sus preguntas en los comentarios y a suscribirse al canal.

Transcripts

play00:00

a ti también te han comido la cabeza con

play00:01

qué redux es la única librería que

play00:03

tenemos disponible para poder gestionar

play00:05

el estado global de nuestras

play00:06

aplicaciones en principio no es verdad y

play00:07

además en react tenemos una herramienta

play00:09

muy muy chula que nos lo va a demostrar

play00:11

hoy vamos a hablar del contexto vamos a

play00:12

ver cómo nos puede ayudar para gestionar

play00:14

un estado más o menos global dentro de

play00:16

nuestra aplicación y vamos a ver cómo

play00:18

podemos utilizarlo y cómo podemos darle

play00:20

forma para que quede elegante al

play00:22

comunicarnos entre nuestros componentes

play00:23

soy mario girón bienvenido a garage code

play00:26

pits

play00:28

y bueno

play00:31

y bueno

play00:34

quizá la comparación entre una librería

play00:36

como redux y el just contexto el hub

play00:38

context que vamos a analizar en el vídeo

play00:40

de hoy sobre react quizás es un poco

play00:42

presuntuoso pero bueno lo podríamos

play00:43

aproximar y además si este jugo lo

play00:45

combinamos con el jugo reducer podemos

play00:47

conseguir algo muy parecido a lo que

play00:49

conseguimos con libre redux y además

play00:52

utilizando herramientas nativas del

play00:53

propio react por lo tanto el rendimiento

play00:55

mejora y nuestra aplicación irá

play00:57

muchísimo mejor nos vamos a centrar

play00:58

justo en la creación de un ámbito nos

play01:02

vamos a centrar en la creación en este

play01:04

caso de un estado un poquito más global

play01:05

para que podamos pasar información de

play01:07

unos componentes a otros también es algo

play01:10

muy muy importante cuando trabajamos ya

play01:12

con una aplicación completa en la que

play01:14

necesitamos de padres a hijos pasar

play01:15

información pero ya no de padres a hijos

play01:17

que estén en contacto sino de padres a

play01:19

hijos que tengan muchas generaciones

play01:21

deportes de por medio que sean abuelo

play01:23

que sean nietos etcétera etcétera es

play01:25

decir mantener un estado global o unos

play01:28

datos que podamos compartir a lo largo

play01:29

de toda nuestra aplicación y lo vamos a

play01:31

ver a través de este hub porque además

play01:33

es una de las novedades que nos trajeron

play01:35

la aparición de los hubs hace ya tiempo

play01:37

en riad y que ahora podemos implementar

play01:39

en nuestros componentes funcionales

play01:41

bueno como lo vamos a hacer vamos a

play01:43

partir de una aplicación muy simple en

play01:44

la que tenemos una jerarquía muy fácil y

play01:47

está dentro del componente app

play01:49

simplemente he colocado un componente

play01:52

hijo como es este caso y dentro de este

play01:54

componente hijo es donde vamos a recibir

play01:56

todos aquellos datos que nosotros

play01:57

generemos desde el contexto principal o

play02:00

que generemos desde el estado principal

play02:01

de nuestra aplicación y la idea es ver

play02:03

cómo podemos interactuar con todos estos

play02:05

personajes dentro de este ecosistema que

play02:08

vamos a generar ahora mismo entonces lo

play02:10

primero que hay que hacer efectivamente

play02:12

es pues dentro del app js luego esto lo

play02:14

orden haremos un poquito más dentro de

play02:16

app vamos a crear un pequeño estado

play02:18

vamos a crear un pequeño contexto que

play02:20

luego podremos pasar a través del resto

play02:22

de componentes para ello que necesitamos

play02:24

bueno pues primero necesito importarme

play02:26

la librería de react entera

play02:30

lo importamos arriba para poder

play02:32

utilizarlo y luego lo que vamos a

play02:33

utilizar es el método create context

play02:35

este método ya existía es un método que

play02:37

ya teníamos disponible con los

play02:39

componentes de clase lo que pasa es que

play02:41

ahora podemos utilizarlo con un hub

play02:42

dentro de los componentes funcionales

play02:44

nos da mucha más flexibilidad a la hora

play02:46

de crear componentes pues con el resto

play02:48

de juegos y hacerlo un poquito más

play02:50

liviano y no con tanta parafernalia como

play02:52

implica la creación de una clase

play02:54

constructor todas estas cosas creamos el

play02:56

hub le llamara y usher con text por

play02:59

ejemplo porque lo que vamos a simular es

play03:01

el guardar un usuario y ver cómo podemos

play03:03

hacer un login y un uno login pero de

play03:06

una forma sencilla y lo que sí que voy a

play03:08

hacer es exportarlo para luego poder

play03:09

utilizarlo desde cualquier otro sitio

play03:11

sin ningún tipo de problema esa variable

play03:13

usuario la vamos a guardar en nuestro

play03:15

componente app por lo tanto lo que vamos

play03:17

a hacer es traernos también de la

play03:19

librería de react el news state

play03:22

este juzga al final lo que no está

play03:24

haciendo es guardarnos cierto estado

play03:26

dentro de nuestras aplicaciones por lo

play03:28

tanto equipo de guardar por ejemplo un

play03:29

usuario y una función que me permita

play03:31

modificar dicho usuario lo guardamos a

play03:33

través de una llamada al yush state y

play03:36

almacenamos pues un objeto con los datos

play03:38

que necesitemos en este caso vamos a

play03:40

inicializar lo vacío para que empiece

play03:41

nulo ya tenemos el usuario generado y

play03:44

además la posibilidad de cambiar ese

play03:46

usuario bien cómo somos capaces nosotros

play03:47

aquí de poder pasar la información a

play03:50

través de los diferentes componentes y

play03:52

que esto sea accesible desde cualquier

play03:53

punto bueno pues la idea es cómo vamos a

play03:55

ser capaces nosotros ahora de enviar la

play03:57

información a través del resto de

play03:59

componentes bueno pues ya que tenemos

play04:00

este loser con text lo podemos utilizar

play04:03

como si fuera un componente generamos

play04:05

user context etiqueta de apertura y

play04:07

cierre cuidado que no se nos quede ahí

play04:09

porque si no no estaríamos generando una

play04:11

jerarquía correcta y en este caso fijaos

play04:14

que lo que vamos a hacer es envolver el

play04:16

resto de componentes dentro de nuestra

play04:18

aplicación es decir estoy poniendo un

play04:19

componente por encima para que el resto

play04:21

de componentes internamente fluyan y

play04:24

cojan los datos que tenemos en este

play04:26

contexto lo que sí hay que hacer es

play04:27

llamar a la función específica provider

play04:29

porque lo que estamos haciendo aquí es

play04:31

oye te voy a pasar ciertos datos esos

play04:33

datos van a estar disponibles dentro de

play04:34

cualquier componente que esté dentro de

play04:36

esa jerarquía y esto es importante

play04:37

definir está esta jerarquía en sí y

play04:40

definir las longitudes y los componentes

play04:44

de apertura y cierre para saber hasta

play04:45

dónde van a poder llegar nuestros datos

play04:47

bien en este provider lo que sí que le

play04:49

podemos pasar es un valor este valor

play04:51

podría ser cualquier cosa podría ser una

play04:53

función podría ser lo que sea nosotros

play04:55

lo que le vamos a pasar es el usuario

play04:56

bueno pues vamos a pasar el propio

play04:58

usuario y lo que estamos logrando es

play05:00

cualquier componente que se encuentre

play05:02

dentro de esta jerarquía que se

play05:04

encuentre internamente dentro de esta

play05:06

jerarquía va a poder acceder a ese

play05:08

usuario a los valores que estén

play05:09

guardados en ese usuario bueno para

play05:11

hacerlo un poquito más interesante vamos

play05:13

a hacer una función que sea por ejemplo

play05:15

cambiar login o algo así vamos a

play05:18

llamarlo cambiar login

play05:20

creamos una pequeña función la activamos

play05:22

con un con un botoncito por ejemplo el

play05:24

cambio login si el usuario existe lo que

play05:26

va a hacer es ponerlo a nulo así que

play05:28

llamaremos a la función set ya ser y lo

play05:30

pondremos a nulo simplemente si el

play05:32

objeto ya existe lo vamos a poner a nulo

play05:33

sí no volvamos a poner de ciertos datos

play05:35

por ejemplo hacemos set y usher y le

play05:38

damos ciertos datos por le vamos a poner

play05:39

un name vamos a poner un name y le vamos

play05:42

a poner pues un email por ejemplo

play05:45

pues este

play05:46

mail puntocom entonces lo que estamos

play05:48

haciendo es un simple método que ahora

play05:51

voy a activar pues con un botón que por

play05:52

ejemplo colocar aquí arriba

play05:55

este botón

play05:57

button este botón o se llama le cambian

play06:00

login lo que va a hacer es simplemente

play06:01

activar esa función para ir cambiando el

play06:03

usuario para simular que ese usuario se

play06:05

lo vea y se des lo vea simplemente para

play06:07

ver cómo luego esos datos se traducen a

play06:09

la hora de pasárselo al componente hijo

play06:11

llamamos a su evento un clic y aquí

play06:13

llamamos a la función que le hemos

play06:14

llamado cambia login

play06:17

por lo tanto cuando ejecutemos esto el

play06:19

caso es que cuando nosotros pulsamos el

play06:22

botón se supone que este valor del

play06:24

usuario va a cambiar pasará de un objeto

play06:26

nulo a un objeto con datos e

play06:28

internamente el contexto será el

play06:30

encargado de pasar esa información a

play06:32

través de cualquier hijo de cualquier

play06:34

componente que tengamos dentro de esta

play06:35

jerarquía por lo tanto el caso aprobar

play06:38

en esta formación sería si dentro del

play06:41

hijo podemos acceder realmente a ese

play06:43

contexto vamos a probarlo lo que tenemos

play06:45

que hacer es dentro del hijo consumir el

play06:47

contexto y esta es la parte importante

play06:49

cuando nosotros trabajábamos con

play06:51

componentes de clase lo que teníamos era

play06:53

esto mismo pero con la propiedad

play06:56

consumer es decir ponemos una jerarquía

play06:58

con un componente y ahí con el consumer

play07:01

nos traíamos el dato que hacemos ahora

play07:03

dentro de nuestros componentes hijo

play07:04

bueno pues me voy a mover al componente

play07:06

que he llamado hijo y lo que tenemos que

play07:08

hacer aquí primero es importar el you

play07:10

ser context el contexto que hemos

play07:12

generado en app por lo tanto importamos

play07:15

y user contexto el propio contexto

play07:18

este esta app ese ahí lo tenemos todavía

play07:21

no lo estamos usando y ahora tenemos que

play07:23

recuperar la información en los

play07:25

componentes funcionales se nos ha puesto

play07:27

la cosa muy muy sencilla porque

play07:29

realmente solo tenemos que generar un

play07:31

objeto por ejemplo yo ser y decirle

play07:34

quiero recuperar información de este

play07:36

contexto y para ello tenemos los

play07:39

contexto vale es context que tenemos que

play07:41

importar de la librería de rayak vale

play07:44

normalmente visual studio y todas las

play07:46

herramientas nos devuelven o nos

play07:49

permiten hacer este tipo de

play07:50

importaciones automáticas si nos sale

play07:52

siempre tengamos en cuenta que el just

play07:54

context que es el interesante en nuestro

play07:56

caso pero estamos importando de la

play07:58

librería de rayak importamos yus context

play08:00

y le decimos simplemente que el contexto

play08:02

es el que vamos a leer y un ser context

play08:04

aquí lo tenemos con esto en principio ya

play08:08

tendríamos el componente cargado ya

play08:11

tendríamos el valor cargado del usuario

play08:13

simplemente vamos a echarle un vistazo a

play08:15

ver si realmente nos devuelve el usuario

play08:18

vamos a hacer una comprobación voy a

play08:19

poner el usuario voy a ver con un

play08:21

pequeño condicional si de verdad tiene

play08:23

valores o no y cuando tenga valores

play08:25

mostramos simplemente el nombre así que

play08:27

con un condicional simple como éste lo

play08:29

que vamos a hacer es que si existe en

play08:31

este caso pues mostramos un párrafo en

play08:34

el que vamos a ver pues hola y aquí

play08:37

ponemos user punto net con esto ya

play08:39

montado estamos viendo que de esta

play08:41

manera tan sencilla yo puedo acceder a

play08:43

un contexto que está situado en otro

play08:45

componente que se está modificando en

play08:47

otro componente y con un simple hub con

play08:50

una llamada a un método muy muy fácil

play08:52

estoy recogiendo esa información y me lo

play08:54

estoy trayendo a este componente

play08:55

evitamos el tener que estar pasando a

play08:57

través de las próx estas variables o

play09:00

estas propiedades y las estamos

play09:02

recuperando de una manera muy muy

play09:03

sencilla para luego poder utilizarlo

play09:05

cualquier modificación que se haga sobre

play09:06

el objeto y usher se tendría que ver

play09:08

reflejada dentro de este componente hijo

play09:11

vamos a arrancar la aplicación y lo

play09:12

probamos aquí tenemos la aplicación

play09:14

levantada muy muy simple porque está

play09:16

mostrando la interfaz de app js con el

play09:18

botón y la interfaz del hijo pues con

play09:20

éste h2 que hemos generado aquí cuando

play09:22

yo le da al botón lo que va a pasar es

play09:23

que va a cambiar ese contexto y como

play09:25

vemos aparecerá el valor del usuario

play09:28

porque le hemos dicho aquí en esta línea

play09:29

que cuando tengamos valor en el uso

play09:31

mostremos ese pequeño párrafo mostremos

play09:34

esa pequeña interfaz bueno esto es muy

play09:37

muy interesante porque nosotros podemos

play09:39

pasar cualquier información de un sitio

play09:41

a otro sin necesidad de tener que estar

play09:43

pasándolo a través de las próx o

play09:45

haciendo cualquier floritura de las que

play09:47

estamos acostumbrados

play09:49

y todo esto cobra especial importancia

play09:50

si lo llevamos a un componente

play09:53

totalmente aparte si aislamos los

play09:55

contextos en un componente y simplemente

play09:57

lo utilizamos pues como una herramienta

play09:59

extra esto lo vamos a llamar un provider

play10:01

además vamos a hacer una serie de

play10:02

funciones que nos permitan pasar tanto

play10:05

el usuario como la acción que cambia el

play10:07

usuario y lo pone a nulo o no a nulo y

play10:08

ya veremos que esto nos va a generar un

play10:10

código súper elegante además muy fácil

play10:12

de utilizar voy a generar un pequeño

play10:15

fichero que voy a llamar user provider

play10:18

llamar aquí user

play10:20

provider punto js lo podríamos colocar

play10:24

como una carpeta providers o algo de

play10:27

este estilo en este user provider lo que

play10:29

vamos a tener simplemente va a ser una

play10:31

función normal y corriente que voy a

play10:32

exportar export

play10:34

función

play10:36

y usher provider

play10:39

ahí tenemos la función va a ser un

play10:41

componente funcional normal y corriente

play10:42

lo que pasa es que va a tener pues una

play10:44

serie de cosas extra vamos a retornar el

play10:46

código js equis que ahora colocaremos en

play10:48

el que vamos a inyectar esos contextos

play10:51

que nosotros vamos a generar aquí arriba

play10:53

vamos a generar dos contextos la idea es

play10:55

que estos contextos ahora mismo se

play10:56

queden aquí englobados y encapsulados

play10:58

que nos salgan por ahí por nuestra

play10:59

aplicación y tengamos que andar

play11:01

exportando el primero va a ser el juz el

play11:04

context que va a guardar información

play11:06

sobre el usuario en este caso sobre la

play11:08

habilidad de react esto no sobre la

play11:11

liberalidad de react vale si no se

play11:13

importa ahí está se ha importado

play11:15

automáticamente llamamos a la función

play11:17

create context luego le pasaremos

play11:19

información y luego le pasaremos datos

play11:21

para hacer esto un poquito más grande y

play11:23

también vamos a crear un pequeño

play11:26

contexto context y usher

play11:30

voy a poner user dog el context haciendo

play11:34

referencia a que vamos a crear aquí

play11:36

cierta información para luego poder

play11:38

hacer la modificación de existe el

play11:40

usuario no existe el usuario y lo mismo

play11:42

voy a crear otro pequeño contexto

play11:44

create context ya tenemos los dos

play11:47

contextos generados ahora lo importante

play11:49

es como yo dentro de este componente soy

play11:50

capaz de pasarle este contexto al resto

play11:53

de componentes con los cuales voy a

play11:55

interactuar bueno pues simplemente lo

play11:56

primero vamos a darle valor a los dos a

play11:58

los dos contextos para el primero

play12:00

necesitamos ius state por lo tanto

play12:03

importamos ius state lo primero y vamos

play12:06

a generar aquí el usuario lo vamos a

play12:08

sacar luego de app set y usher lo mismo

play12:12

y uso state y lo generamos con valor

play12:15

inicial nulo y también la función cambia

play12:18

login la voy a traer de app js para no

play12:20

estar picando otra vez la misma función

play12:22

función cambia login

play12:25

la cogemos de app js y la traemos al

play12:27

provider repito que la idea es un poco

play12:28

aislar estos estos contextos para luego

play12:32

poder pasarse los a los diferentes

play12:33

componentes sin necesidad de tener

play12:35

problemas de estar exportando importando

play12:37

etcétera como podemos hacer esto bueno

play12:40

pues es muy sencillo nosotros la tenemos

play12:41

que inyectar los providers a todos los

play12:44

componentes hijo de este componente como

play12:47

lo hacemos pues usamos el primer

play12:48

contexto

play12:50

y usher context llamamos 'la provider y

play12:53

como valor le vamos a pasar el you ser

play12:56

como estábamos haciendo pero también

play12:57

internamente vamos a llamar al otro

play13:00

contexto

play13:01

vamos a llamar a ser todo el context

play13:04

vale vamos a llamar a su propiedad

play13:07

provider y como value en este caso le

play13:09

vamos a pasar la función cambia lo que

play13:11

cambia

play13:12

login podemos hacerlo igualmente es

play13:15

decir lo que estamos logrando aquí es

play13:17

además de inyectar el usuario también

play13:21

vamos a inyectar como un contexto aparte

play13:23

la función cambia login y todo esto va a

play13:26

ser inyectado a todos los componentes o

play13:29

elementos hijo de este componente your

play13:31

self provider que nosotros estamos

play13:33

generando mal y esto es muy importante

play13:34

porque nosotros vamos a conseguir que a

play13:37

todos esos componentes que se encuentren

play13:39

dentro de este loser provider le vamos a

play13:41

poder pasar pues estos dos contextos el

play13:43

del usuario y la función para poder

play13:45

modificarlo entonces ahora simplemente

play13:47

en app js tenemos que hacer algunos

play13:49

cambios todavía pero en app js voy a

play13:51

eliminar esto que ya lo he conseguido

play13:52

aislar ya no hace falta que lo inyecte

play13:55

aquí

play13:56

este contexto ya no hace falta que lo

play13:57

genere aquí ni que los portes porque lo

play13:59

estoy encapsulando dentro del provider y

play14:02

lo que sí que voy a hacer es cambiar

play14:03

este provider por el you ser provider

play14:06

que hemos generado una llamada a nuestro

play14:08

componente y user provider que colocamos

play14:10

ahí y colocamos aquí y lo que

play14:12

comentábamos antes todos los hijos

play14:14

contenidos dentro de este loser provider

play14:17

van a ser los que van a recibir la

play14:19

información de los contextos que estamos

play14:21

generando

play14:23

tenemos que arreglar evidentemente las

play14:24

exportaciones porque en el componente

play14:26

hijo estamos intentando acceder a algo

play14:29

que hemos quitado de app js lo

play14:31

importante de esto y lo interesante es

play14:33

que en nuestro provider que ya lo

play14:34

tenemos preparado para inyectar en los

play14:37

diferentes contextos a los diferentes

play14:39

componentes hijo como nosotros accedemos

play14:41

externamente a estos contextos una

play14:44

acción buena sería bueno podemos

play14:46

exportar los males los dejo exportados y

play14:48

los importó como he hecho antes pero

play14:49

claro hablando un poco de encapsulación

play14:51

y de que nos salgan de este fichero y

play14:52

user provider queda un poco feo que

play14:54

podemos hacer bueno pues podemos crear

play14:56

dos pequeños hubs muy muy sencillos de

play14:59

utilizar lo primero que voy a hacer es

play15:01

traerme aquí es context porque lo vamos

play15:03

a utilizar recordemos que hemos hablado

play15:05

de yoox context nuestro protagonista

play15:07

durante este vídeo y hemos dicho que

play15:09

éste con este hub lo que nos permitía

play15:11

era acceder a un contexto que tuviésemos

play15:13

dentro de nuestra aplicación sacamos los

play15:15

datos y podíamos trabajar con ellos pero

play15:17

pues lo que voy a hacer es hacer aquí

play15:18

las llamadas desde houston tex para que

play15:20

desde fuera desde el componente hijo no

play15:22

tenga que hacer esas llamadas vamos a

play15:24

generar dos funciones export voy a crear

play15:27

una función por ejemplo si la creó con

play15:29

la palabra ius delante riac ya entiende

play15:32

que esto va a ser un look por lo tanto

play15:35

luego podría utilizarlo en mis

play15:36

componentes funcionales y lo voy a

play15:38

llamar news y usher context es decir una

play15:42

función en la que internamente ya voy a

play15:45

retornar esa llamada context que

play15:48

necesitará mi componente hijo para

play15:51

traerse todos los valores de este

play15:53

contexto que hemos generado aquí con el

play15:55

valor del usuario por lo tanto aquí le

play15:57

pasaré el juz el context lo mismo vamos

play16:01

a hacer para el otro contexto una

play16:03

función

play16:05

las pongo exportables para luego poder

play16:07

traer medias y poder utilizarlas una

play16:09

función

play16:11

user toggle contex por ejemplo con texto

play16:17

y dentro de esta función llamamos otra

play16:20

vez a los contextos por lo tanto

play16:21

quitamos esta llamada del componente

play16:23

hijo lo encapsula vamos aquí y

play16:25

facilitamos mucho el trabajo y aquí

play16:28

pasamos el giuseppe dog el context en

play16:31

cualquier componente donde yo ahora

play16:33

utilice estos dos hubs voy a tener la

play16:35

posibilidad de traerme ese usuario y por

play16:37

lo tanto poder trabajar con él vamos a

play16:39

probarlo voy a ir al componente hijo

play16:41

vamos a quitar cosas como por ejemplo la

play16:44

importación de liu ser con text tampoco

play16:46

necesitamos el juz context porque ahora

play16:49

lo que vamos a hacer es trabajar con

play16:50

nuestros propios hooks es decir vamos a

play16:53

traernos el hub

play16:55

news user contexto este de aquí y el

play16:58

otro también news y usar todo el context

play17:02

esto aquí abajo lo quitamos

play17:05

de mi componente yo ser provider me

play17:08

estoy trayendo mis propios looks vale

play17:10

mis propios books lo pruebo aquí en vez

play17:13

de llamar eyeos context lo que tengo que

play17:15

hacer es llamar a la función news y

play17:18

usher context ya está esta función

play17:20

internamente evidentemente que lo que

play17:22

está haciendo es ejecutar el juz context

play17:25

por lo tanto me devolverá el valor y

play17:27

aquí tendré la opción de acceder al

play17:29

usuario y a cualquiera de sus datos lo

play17:32

mismo va a pasar con el botón en este

play17:34

caso el botón lo teníamos en app punto j

play17:35

s vamos a quitarlo de aquí lo voy a

play17:38

mover de aquí y lo voy a poner en el

play17:40

hijo vamos a poner en el hijo tal que

play17:43

por ejemplo aquí el botón la función

play17:46

cambia login no existe pero la vamos a

play17:48

recuperar

play17:50

cambia login

play17:52

va a ser igual y utilizo el otro hook

play17:56

que acabo de crear y de esta manera ya

play17:58

me estoy trayendo la información de la

play18:00

función cambia login que es justo la que

play18:02

modifica esta esta acción en concreto

play18:05

que no se nos olvide en el componente

play18:06

yüksel provider para poder acceder a los

play18:08

datos evidentemente y aquí para poder

play18:11

acceder a estos children nosotros lo

play18:13

tenemos que sacar dentro del giuseppe

play18:15

provider en la definición de la función

play18:16

las probé solo me quedo con children o

play18:20

si lo queremos hacer de una manera

play18:21

digamos un poco más tradicional aquí me

play18:24

traigo las próx y abajo accedo a props

play18:26

punto chile nada más de una manera o la

play18:30

otra y de esta manera he conseguido que

play18:32

en el componente hijo ya tengamos el

play18:34

cambia login y que podamos hacer

play18:36

exactamente lo mismo pero es más es que

play18:39

este user provider que acabamos de

play18:40

generar es genérico para toda nuestra

play18:42

aplicación y encapsula la información

play18:45

tanto del contexto del usuario como del

play18:47

contexto de la función que nos permite

play18:49

cambiar ese usuario y de esta manera

play18:51

podríamos ampliarlo muchísimo más porque

play18:54

con estos dos juegos con estas dos

play18:55

funciones personalizadas que nos hemos

play18:57

hecho

play18:59

de los componentes donde yo lo fuese a

play19:00

utilizar podría estar haciendo estos

play19:02

cambios y podría estar haciendo acceso o

play19:04

podría estar accediendo a este contexto

play19:06

en concreto esto nos demuestra un código

play19:09

mucho más elegante nos genera un código

play19:11

mucho más flexible con el cual nosotros

play19:14

podemos seguir creciendo y además no nos

play19:16

tenemos que estar exportando tantas

play19:18

cosas y las acciones como decía antes

play19:21

sobre context las dejamos encapsuladas

play19:24

en este objeto y user provider mucho más

play19:27

cómodo para nosotros si esto lo

play19:29

combinaremos con otros como jules

play19:31

reducer por ejemplo podríamos hacer algo

play19:33

muy parecido a lo que conseguimos con

play19:35

redux que fue nuestro principal objetivo

play19:39

al principio y además sería pues eso muy

play19:43

muy parecido pero con componentes

play19:44

propios de react por lo tanto el

play19:46

rendimiento de nuestra aplicación sería

play19:48

mucho más rápido porque no estaremos

play19:50

utilizando librerías externas bien bueno

play19:53

si te ha gustado yo te dejo el código en

play19:55

la parte de abajo en el repositorio como

play19:57

siempre para que puedas seguirlo y para

play19:59

que puedas modificarlo y para que puedas

play20:00

trabajar sobre él

play20:02

cualquier pregunta que tengas nos lo

play20:04

puedes dejar en la caja de comentarios

play20:06

estaremos encantadísimos de responderte

play20:08

la y no te olvides de suscribirte darle

play20:10

al like y todo eso porque hombre nos vas

play20:12

a ayudar bastante y nada más nos vemos

play20:15

en el próximo vídeo que vaya bien hasta

play20:17

luego

Rate This

5.0 / 5 (0 votes)

関連タグ
ReactEstado GlobalContext APIGestión de EstadosDesarrollo WebMario GirónGarage CodeHooksProviderEncapsulación
英語で要約が必要ですか?