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.
Comments