¡Y hemos terminado! Tenemos a Toysard, Squirtle y Pikachu. ¡Genial! En mi opinión, una aplicación no es una aplicación sin un indicador de carga. Esa es la parte donde la mayoría de los desarrolladores usarán Redux u otra solución para manejar este tipo de estados.
Usaré useReducer por razones de simplicidad, que es muy similar a los reducers de Redux. Así que crearé un Reducer de Pokémon, que recibe un estado y una acción, y cambiará el tipo de acción. Primero, manejemos un caso predeterminado, agreguemos un error y ahora agreguemos el estado común de carga. El estado es de carga, y genial. Pero, ¿qué pasa si obtengo un error? Así que agreguemos un estado para esto también, con los datos de error, y seguramente necesitamos un estado de éxito para almacenar los datos obtenidos de la API del servicio. Y como a veces no estaremos en ninguno de estos estados, agreguemos un estado inactivo y declaremos un estado inicial para comenzar.
Ahora puedo usarlo en la aplicación, en lugar del useState regular. Así que extraigamos el estado y la función de despacho del reducer, usando el PokémonReducer y el estado inicial. Y adaptemos la interfaz de usuario para usar nuestra nueva variable de estado. Entonces, cuando esté inactivo, mostraré un texto para hacer clic y obtener un Pokémon, y en caso de éxito, quiero mostrar los datos del Pokémon. Así que implementemos esto también. Presta atención, el Pokémon data ya no existe, así que lo reemplazaremos con la variable de estado. Y en caso de error, quiero mostrar el mensaje de error que guardé en el estado. Y finalmente, quiero deshabilitar el botón mientras esté en el estado de carga.
Ahora finalmente puedo implementar fácilmente el indicador de carga. Entonces, lo que haré es cambiar el texto del botón a `Cargando` cuando esté en el estado de carga. Y mostraré el texto `Obtener Pokémon` cuando no esté. Obteniendo. Ok, y no olvides despachar el estado correcto cuando esté cargando. Y cuando recibamos los datos. Con los datos. Y cuando ocurra algún error. Actualicemos y probemos. Veo que no obtenemos el indicador de carga. Creo que sé por qué hay un error en el setTimeout. Arreglémoslo. Genial.
Comments