Gestión del estado en React con Context y Hooks

Rate this content
Bookmark

Mucho ha cambiado en el mundo de la gestión del estado en React en los últimos años. Donde Redux solía ser la principal biblioteca para esto, la introducción de las API de Contexto y Hooks de React ha revolucionado las cosas. Ya no necesitas bibliotecas externas para manejar tanto el estado del componente como el estado global en tus aplicaciones. En este masterclass aprenderás los diferentes enfoques para la gestión del estado en la era post-Redux de React, ¡todos basados en Hooks! Y como bonificación, exploraremos dos próximas bibliotecas de gestión del estado en el ecosistema de React.

This workshop has been presented at React Summit Remote Edition 2021, check out the latest edition of this React Conference.

FAQ

La gestión del estado en React se refiere al manejo de cómo se guardan, modifican y pasan los datos dentro de una aplicación. Es crucial para manejar datos dinámicos que cambian a lo largo del tiempo, especialmente en interfaces complejas.

Redux es popular porque ofrece una solución consistente y predecible para manejar el estado a través de una aplicación, facilitando la comunicación entre componentes y mejorando la capacidad de manejar estados complejos y acciones asíncronas.

Además de Redux, algunas alternativas populares incluyen la API de Contexto de React, useReducer, MobX y Apollo para aplicaciones que utilizan GraphQL. Estas herramientas ofrecen diferentes enfoques y beneficios dependiendo de las necesidades específicas del proyecto.

La API de Contexto en React permite pasar datos de manera global a través del árbol de componentes sin tener que pasar props manualmente en cada nivel. Se utiliza creando un objeto de contexto y utilizando proveedores y consumidores para acceder y proveer datos a los componentes.

El estado local se recomienda para datos que son relevantes solo dentro de un componente o una pequeña parte de la aplicación. Si el estado necesita ser compartido entre muchos componentes o tiene una estructura compleja, herramientas como Redux o la API de Contexto podrían ser más adecuadas.

La elección de la herramienta de gestión del estado puede afectar el rendimiento al determinar cómo se manejan las actualizaciones y se propaga el estado. Herramientas inadecuadas para las necesidades de la aplicación pueden llevar a re-renderizados innecesarios y gestionar ineficientemente los estados, afectando la velocidad y la eficiencia.

Roy Derks
Roy Derks
71 min
10 Jun, 2021

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La masterclass de hoy se centra en la gestión del estado en React utilizando la API de Contexto y Hooks. La API de Contexto es ahora una opción viable para la gestión del estado y proporciona características adicionales para una gestión del estado efectiva. Se pueden crear hooks personalizados para manejar el estado local y acceder a los valores del contexto. Combinar múltiples contextos y utilizar el hook useMemo puede evitar renderizados innecesarios de componentes. El hook useReducer permite una lógica de estado más compleja, similar a Redux. La depuración se puede realizar mediante la creación de hooks personalizados y el registro de acciones. El contexto se puede utilizar para la gestión del estado global mediante la separación de proveedores en diferentes componentes. La masterclass incluye ejercicios para practicar el uso del contexto y salas de discusión. La sesión de preguntas y respuestas aborda la obtención de datos y la gestión de errores con el contexto.

1. Introducción a la Gestión del Estado en React

Short description:

El masterclass de hoy trata sobre la gestión del estado en React con Context y Hooks. Te mostraré algunas alternativas y cómo se comparan con Redux. Mi nombre es Roy, puedes encontrarme en Twitter con el nombre gethackteam. Soy el encargado de los equipos de ingeniería en Vandebron y trabajo con el equipo de Sailor. He escrito libros y dado charlas sobre React, React Native y GraphQL. Recientemente creé un libro sobre cómo crear aplicaciones full stack con GraphQL.

Así que me alegra ver que todos se hayan inscrito y se hayan unido a mí en este masterclass. ¿De qué se trata esto? Creo que si estás trabajando con React, probablemente hayas escuchado sobre la gestión del estado desde el principio y probablemente te hayas sentido confundido y también hayas estado leyendo más sobre ello cada día porque creo que hay muchos temas diferentes en la gestión del estado de React.

Cuando comenzamos, o al menos cuando yo comencé a trabajar con React, creo que todos decían que Redux era la herramienta dorada para la gestión del estado y a menudo encontrarías, al menos si estabas buscando trabajo, que Redux era una habilidad deseada para prácticamente todas las empresas que trabajaban con React. Y también la gente pregunta sobre React, así que cada vez que hacía masterclasses, la gente me hacía preguntas sobre cómo usar Redux, cómo implementarlo, por qué deberías usarlo para la gestión del estado o por qué no. Y creo que la discusión sigue siendo muy relevante hoy en día. E incluso con nuevas herramientas como la API de contexto, se ha vuelto cada vez más relevante. ¿Es Redux realmente la mejor herramienta para tu producto? ¿Deberías estar usándolo? Así que hoy no te diré cómo usar Redux, pero te mostraré algunas alternativas y también cómo se comparan esas alternativas con Redux. Un poco sobre mí, mi nombre es Roy, puedes encontrarme en Twitter con el nombre gethackteam, y actualmente soy el encargado de los equipos de ingeniería en Vandebron, que es una empresa de energía renovable en los Países Bajos. También trabajo junto con el equipo de Sailor, y Sailor es una API de comercio electrónico para en realidad más que un simple producto, algo similar a lo que Strapi o GraphCMS hacen para los sistemas de gestión de contenido, pero para el comercio electrónico. También es una herramienta muy útil que utiliza mucho React en el front-end. Y es posible que ya me conozcas por algunos de los libros que he escrito sobre React o React Native o por las charlas que he dado sobre esos temas, pero también mucho sobre GraphQL, así que si estás interesado en eso, por favor encuéntrame en línea. Y también hace poco tiempo, creé este nuevo libro sobre cómo crear aplicaciones full stack con GraphQL, y tanto en el back-end con GraphQL y TypeScript como en el front-end con React y XGS, así que si estás interesado en ese tipo de cosas, sí, puedes encontrarlo aquí en este sitio web.

2. Introducción a la API de Contexto y la Gestión del Estado

Short description:

El masterclass de hoy se trata principalmente de la API de contexto y cómo puedes usarla para gestionar el estado de manera efectiva en cualquier aplicación de React. La API de contexto se puede ver como una especie de estado o estado local que envuelve varios componentes. Deberías poder acceder a este valor de contexto y también acceder a funciones para actualizar el valor de contexto. Antes de algunas versiones de React atrás, se recomendaba no utilizar la API de contexto para la gestión del estado. Sin embargo, muchas cosas han cambiado y ahora es una opción viable. La API de contexto proporciona características adicionales que hacen que la gestión del estado sea más efectiva.

Así que hoy, volvamos al estado. Antes de entrar en detalles, veamos qué es realmente el estado, porque el estado puede ser muchas cosas y a menudo también puede estar viviendo dentro de un menú. Hace dos años, estaba creando una biblioteca de código abierto para la ciudad de Ámsterdam, donde también vivo, y allí estábamos trabajando con el estado, por supuesto.

También creamos una biblioteca de componentes, por lo que también trabajamos con menús y elementos de menú dentro de ese menú. Y el menú se veía así. Tenías un menú simple que podía estar abierto o cerrado, y si estaba abierto, el estado pasaba y decidíamos mostrar un submenú. En esta solución, casi siempre pasamos el estado hacia abajo. Simplemente puedes crear un menú y pasar el estado hacia abajo, ya sea que el menú esté abierto o no, y luego, en función de eso, harás algo dentro de tal vez un componente hijo, tal vez renderices un componente hijo.

Y en esta solución, casi siempre usas estado local, ya sea un estado en un componente de React basado en clases o tal vez si estás usando componentes de función, entonces usarías el hook useState. Y creo que para cosas simples como esta, como tener un menú, tener un submenú o tal vez solo un elemento de menú, siempre eliges usar estado local porque no tiene mucho sentido implementar algo más grande como Redux o la API de contexto o tal vez una de esas otras herramientas que existen. Pero si tienes un menú más complejo, ya necesitas considerar si aún quieres usar un estado local simple en React. Porque tal vez tengas un menú, tengas un submenú, haya un elemento de menú o tal vez el elemento de menú dentro del submenú sea otro submenú, en teoría, podríamos ir indefinidamente lejos.

Y en esta solución, ya es bueno comenzar a pensar en el estado, como qué tan complejo debe ser mi estado o qué tan simple debe ser. Este podría ser un ejemplo de tu menú. Tal vez tengas un menú hamburguesa para dispositivos móviles. Podría estar abierto o cerrado. Entonces aún tienes un estado simple como abierto es verdadero o falso. Pero tal vez también tengas un hijo adentro que podría estar abierto o cerrado, por lo que también tienes un estado para el hijo abierto o cerrado allí. Esto ya está empezando a verse un poco más complejo, y especialmente si quieres que las personas se mantengan en el mismo estado cada vez que actualicen la página. Creo que se está volviendo cada vez más complejo y son cosas en las que debes pensar.

También puedes estar usando, si has trabajado en una biblioteca de componentes antes, probablemente te hayas preguntado acerca de los componentes accesibles. Si quieres que tu componente sea accesible, quieres que ciertas partes se resalten cuando alguien use el teclado para navegar en lugar de su mouse. Si estuvieras en esa situación, tal vez también quieras saber qué hijo está seleccionado, por lo que no solo quieres saber si el menú está abierto, si un submenú está abierto o en realidad qué submenú está abierto, sino que también quieres saber qué hijo está seleccionado. Y esto se vuelve bastante complejo y también depende de hasta dónde quieres llegar, porque no creo que necesites definir IDs en el estado para determinar qué submenú está abierto, pero tal vez si quieres hacer esto, ya se vuelve más complejo.

Y esto todavía es algo para lo que puedes usar bastante fácilmente el estado local. Pero ya hay algo en lo que debes pensar si aún pasaras la prop zona. Y creo que para estos escenarios en los que tendrías un menú con un elemento de menú o tal vez un menú con un submenú o múltiples submenús y elementos de menú dentro de él, creo que es probablemente sencillo decir que simplemente puedes pasar el estado hacia abajo, crear estado local en los componentes padres y pasarlo como props. Y en el componente padre, administrarás el estado local, te asegurarás de que los elementos del menú estén abiertos o cerrados, independientemente de las acciones que alguien esté tomando en tu aplicación. Pero ¿qué pasa si estos componentes no son menús o submenús o elementos de menú? Entonces, si estos componentes son toda tu aplicación o incluso rutas dentro de tu aplicación o componentes dentro de rutas dentro de toda tu aplicación, si estuvieras en esa situación, probablemente ya no usarías el estado local porque quieres que tu estado sea más diverso.

Y cuando hablamos de más diverso, siempre pienso en el tablero de ajedrez. El ajedrez se ha vuelto cada vez más popular, creo, especialmente con todos los programas de Netflix y todos los documentales geniales al respecto. Entonces, cuando piensas en el estado, también puedes pensar en un tablero de ajedrez. ¿Quieres que tu estado sea simple? ¿Quieres que tu estado pueda pasar de un campo a otro o de un componente a otro? El peón es en realidad la pieza más básica en el ajedrez, o ¿quieres que tu estado sea más complejo? ¿Quieres que pueda omitir componentes o campos para poder retroceder y avanzar? ¿Es eso algo que quieres que haga tu estado? Y si ese es un escenario, entonces no te ayudará lo suficiente usar solo el estado local con tal vez el hook useState o incluso el hook useReducer. Ese es un escenario en el que probablemente quieras hacer más y realmente necesitas más.

Y con ese escenario, tal vez podrías haber terminado usando la API de contexto o usando useReducer, pero antes de que esas funciones estuvieran disponibles, probablemente terminaste usando algo como Redux o MobX, o si estás usando GraphQL, algo como Apollo. Y todas estas bibliotecas se crearon porque React carecía de ciertas características y no podía hacer la gestión del estado de manera efectiva. Especialmente para hacer la gestión del estado de manera efectiva. Entonces, creo que la API de contexto nos ayudó mucho al agregar estas características adicionales y te mostraré cómo puedes usarla.

Entonces, la agenda para hoy, principalmente te daré una introducción durante unos 30 o 40 minutos, y luego trabajaré en ejercicios en salas de trabajo. Y luego, entre medias, podemos sincronizarnos para ver los ejercicios. Dependiendo de qué tan rápido vaya hoy, tal vez no podamos hacer todos los ejercicios de una vez. Afortunadamente, tenemos el canal de Discord, y creo que ya lo compartí en el chat, y Lira también estaba allí. Entonces, si no estás en el canal de Discord, por favor, avísale a través de Discord, y ella puede agregarte al canal y podemos discutir los ejercicios incluso después del masterclass de hoy. El masterclass de hoy se trata principalmente de la API de contexto y cómo puedes usarla para gestionar el estado de manera efectiva en cualquier aplicación de React. Y en realidad, antes de algunas versiones de React atrás, se recomendaba no usar contexto porque si quieres que la aplicación sea estable, no uses contexto, es experimental.

Y creo que fue un mensaje muy bueno porque muchas cosas han cambiado en la API de contexto. Y algunas personas incluso dicen que no deberías usarla para la gestión del estado, pero creo que también es un poco una pregunta más opinativa para muchas personas. Pero antes de esta versión de React, en realidad se recomendaba no usar la API de contexto de React para la gestión del estado. Y en realidad, React también te decía, o al menos la documentación de React te decía, si no estás familiarizado con las bibliotecas de gestión del estado como Redux o MobX, no uses contexto y simplemente usa estas bibliotecas porque están mejor probadas, son construidas por la comunidad y pueden tener muchas características que de otra manera no tendrías. Entonces, ¿cómo funciona la API de contexto? La API de contexto se puede ver como una especie de estado o estado local, o no necesariamente tiene que ser estado local, pero podría ser estado local, que envuelve varios componentes. Desde varios componentes, deberías poder acceder a este valor de contexto y también acceder a funciones para actualizar el valor de contexto.

QnA

Watch more workshops on topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Aventuras de Renderizado Concurrente en React 18
React Advanced 2021React Advanced 2021
132 min
Aventuras de Renderizado Concurrente en React 18
Top Content
Featured WorkshopFree
Maurice de Beijer
Maurice de Beijer
Con el lanzamiento de React 18 finalmente obtenemos el tan esperado renderizado concurrente. Pero, ¿cómo va a afectar eso a tu aplicación? ¿Cuáles son los beneficios del renderizado concurrente en React? ¿Qué necesitas hacer para cambiar al renderizado concurrente cuando actualices a React 18? ¿Y qué pasa si no quieres o no puedes usar el renderizado concurrente todavía?

¡Hay algunos cambios de comportamiento de los que debes estar al tanto! En esta masterclass cubriremos todos esos temas y más.

Acompáñame con tu portátil en esta masterclass interactiva. Verás lo fácil que es cambiar al renderizado concurrente en tu aplicación React. Aprenderás todo sobre el renderizado concurrente, SuspenseList, la API startTransition y más.
Consejos sobre React Hooks que solo los profesionales conocen
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
Consejos sobre React Hooks que solo los profesionales conocen
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
La adición de la API de hooks a React fue un cambio bastante importante. Antes de los hooks, la mayoría de los componentos tenían que ser basados en clases. Ahora, con los hooks, estos son a menudo componentes funcionales mucho más simples. Los hooks pueden ser realmente simples de usar. Casi engañosamente simples. Porque todavía hay muchas formas en las que puedes equivocarte con los hooks. Y a menudo resulta que hay muchas formas en las que puedes mejorar tus componentes con una mejor comprensión de cómo se puede usar cada hook de React.Aprenderás todo sobre los pros y los contras de los diversos hooks. Aprenderás cuándo usar useState() versus useReducer(). Veremos cómo usar useContext() de manera eficiente. Verás cuándo usar useLayoutEffect() y cuándo useEffect() es mejor.
React, TypeScript y TDD
React Advanced 2021React Advanced 2021
174 min
React, TypeScript y TDD
Top Content
Featured WorkshopFree
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.
Masterclass Web3 - Construyendo Tu Primer Dapp
React Advanced 2021React Advanced 2021
145 min
Masterclass Web3 - Construyendo Tu Primer Dapp
Top Content
Featured WorkshopFree
Nader Dabit
Nader Dabit
En esta masterclass, aprenderás cómo construir tu primer dapp de pila completa en la blockchain de Ethereum, leyendo y escribiendo datos en la red, y conectando una aplicación de front end al contrato que has desplegado. Al final de la masterclass, entenderás cómo configurar un entorno de desarrollo de pila completa, ejecutar un nodo local e interactuar con cualquier contrato inteligente usando React, HardHat y Ethers.js.
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
React Summit 2023React Summit 2023
151 min
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
Top Content
Featured Workshop
Josh Justice
Josh Justice
La Biblioteca de Pruebas de React es un gran marco para las pruebas de componentes de React porque responde muchas preguntas por ti, por lo que no necesitas preocuparte por esas preguntas. Pero eso no significa que las pruebas sean fáciles. Todavía hay muchas preguntas que tienes que resolver por ti mismo: ¿Cuántas pruebas de componentes debes escribir vs pruebas de extremo a extremo o pruebas de unidad de nivel inferior? ¿Cómo puedes probar una cierta línea de código que es difícil de probar? ¿Y qué se supone que debes hacer con esa persistente advertencia de act()?
En esta masterclass de tres horas, presentaremos la Biblioteca de Pruebas de React junto con un modelo mental de cómo pensar en el diseño de tus pruebas de componentes. Este modelo mental te ayudará a ver cómo probar cada bit de lógica, si debes o no simular dependencias, y ayudará a mejorar el diseño de tus componentes. Te irás con las herramientas, técnicas y principios que necesitas para implementar pruebas de componentes de bajo costo y alto valor.
Tabla de contenidos- Los diferentes tipos de pruebas de aplicaciones de React, y dónde encajan las pruebas de componentes- Un modelo mental para pensar en las entradas y salidas de los componentes que pruebas- Opciones para seleccionar elementos DOM para verificar e interactuar con ellos- El valor de los mocks y por qué no deben evitarse- Los desafíos con la asincronía en las pruebas de RTL y cómo manejarlos
Requisitos previos- Familiaridad con la construcción de aplicaciones con React- Experiencia básica escribiendo pruebas automatizadas con Jest u otro marco de pruebas unitarias- No necesitas ninguna experiencia con la Biblioteca de Pruebas de React- Configuración de la máquina: Node LTS, Yarn

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Una Guía del Comportamiento de Renderizado de React
React Advanced 2022React Advanced 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Construyendo Mejores Sitios Web con Remix
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Construyendo Mejores Sitios Web con Remix
Top Content
Remix is a web framework built on React Router that focuses on web fundamentals, accessibility, performance, and flexibility. It delivers real HTML and SEO benefits, and allows for automatic updating of meta tags and styles. It provides features like login functionality, session management, and error handling. Remix is a server-rendered framework that can enhance sites with JavaScript but doesn't require it for basic functionality. It aims to create quality HTML-driven documents and is flexible for use with different web technologies and stacks.
Todo Más Allá de la Gestión de Estado en Tiendas con Pinia
Vue.js London Live 2021Vue.js London Live 2021
34 min
Todo Más Allá de la Gestión de Estado en Tiendas con Pinia
Top Content
State management is not limited to complex applications and transitioning to a store offers significant benefits. Pinia is a centralized state management solution compatible with Vue 2 and Vue 3, providing advanced devtools support and extensibility with plugins. The core API of Pinia is similar to Vuex, but with a less verbose version of stores and powerful plugins. Pinia allows for easy state inspection, error handling, and testing. It is recommended to create one file per store for better organization and Pinia offers a more efficient performance compared to V-rex.
Compilador React Forget - Entendiendo React Idiomático
React Advanced 2023React Advanced 2023
33 min
Compilador React Forget - Entendiendo React Idiomático
Top Content
Joe Savona
Mofei Zhang
2 authors
The Talk discusses React Forget, a compiler built at Meta that aims to optimize client-side React development. It explores the use of memoization to improve performance and the vision of Forget to automatically determine dependencies at build time. Forget is named with an F-word pun and has the potential to optimize server builds and enable dead code elimination. The team plans to make Forget open-source and is focused on ensuring its quality before release.
Uso efectivo de useEffect
React Advanced 2022React Advanced 2022
30 min
Uso efectivo de useEffect
Top Content
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.