Vamos a ver como usar context para evitar prop drilling, hacer separation of concerns y principalmente ahorrarnos dolores de cabeza a futuro.
Una aplicación que muestre imágenes de perritos, mostrando primero un disclaimer de que su lindura puede afectar a la salud.
Capaz no la última (si sos un ser frio e insensible).
El detalle acá va a ser que quien va a decidir si mostrar la aplicación o el disclaimer (basado en si se aceptó o no) lo va a hacer el context y no nuestro componente index.js / App.js como sucede generalmente.
Estos van a ser los 3 pasos a seguir cada vez que creemos un nuevo context para nuestra aplicación, podes tener (y te recomiendo tener) un context por cada “feature” de tu aplicación (session, user, etc). En este caso vamos a usar solo uno por cuestiones de simplicidad.
Creamos una carpeta store y dentro un archivo dog.js con el siguiente contenido (atento a los comentarios en el código):
Vamos a nuestro index.js y lo llenamos de la siguiente manera (atento a los comentarios en el código):
Si bien ya usamos nuestro context en el paso anterior, falta una parte donde lo usamos. Vamos a crear al mismo nivel que nuestro index.js un archivo TermsOfService.js con el siguiente contenido (atento a los comentarios en el código):
Ya estamos!, vamos a hacer un pequeño recap:
Cuando se muestra el disclaimer, nosotros clickeamos en Si y eso ejecuta la funcion acceptTerms que despacha la acción TERMS_ACCEPTED , lo cual pasa la propiedad termsAccepted a true y hace que nuestro context, en vez de mostrar el disclaimer muestre nuestra aplicación.
Podemos imaginar algo parecido con autenticación, mostrar el login siempre que el usuario no este autenticado, de esa manera no tenemos que preocuparnos por redirigir al usuario y siempre va a poder mantener la ruta en la que estaba.
Acá dejo otro ejemplo, un poco mas lindo visualmente, usando exactamente el mismo patrón
Felicitaciones, aprendiste como yo creo que las cosas son mejores. Ahora olvidate que alguien lo hace así y usá esta información de la manera que más te sirva, be creative 💫