Ahora, por supuesto, no puedo atribuirme el mérito de eso. Tener Linsley creó la biblioteca, y él diseñó la mayoría de las APIs. Y de hecho tiene un tweet muy bueno que resume los objetivos de la biblioteca, donde dice que la API de consulta es en realidad de tamaño medio cuando la desglosas toda, pero la parte más importante es que puedes entender y aprender a usarla comenzando con una sola función que proporciona el 80% de toda la propuesta de valor en el primer intento. A partir de ahí, el resto de su API se puede aprender gradualmente si es necesario. Y creo que eso es lo que se necesita para que una biblioteca se vuelva popular. Necesita ser tanto mínima e intuitiva, como poderosa y flexible.
Pero para cualquier API dada, ya sabes, esas dos cosas suelen estar en lados opuestos de la misma escala. Si echamos un vistazo a los métodos de array, por ejemplo, en el lado izquierdo, tendríamos algo como array.join, ¿verdad? Un método muy simple. Hace una cosa y lo hace muy bien, y no hay sorpresas allí. Y en el otro extremo del espectro, tendríamos algo como array.reduce, que es muy poderoso. Podemos implementar todos los demás métodos de array solo con reduce. Pero ya sabes, si esto es lo único que tenemos disponible, probablemente tampoco sería genial, porque también es bastante complicado de leer de vez en cuando.
Ahora, para las bibliotecas, creo que falta la segunda escala, y esa debería ser usualmente la complejidad de la aplicación, porque a medida que la complejidad de tu aplicación crece, realmente quieres que tus APIs se vuelvan más poderosas y flexibles. Y en esa escala, pondría useQuery justo aquí, abajo a la izquierda, si lo llamamos con los argumentos mínimos requeridos, que son básicamente solo la clave de consulta y la función de consulta. Ahora, esa API, creo, sigue siendo bastante simple y fácil de usar, pero nos da muchas cosas ya de inmediato. Obtenemos cosas como almacenamiento en caché, duplicación de solicitudes, actualizaciones en segundo plano, ya sabes, recolección de basura automática, como la lista sigue y sigue. Hay muchas cosas que obtenemos solo con esta llamada de función. Y luego más tarde, podríamos añadir una llamada a useMutation, ¿verdad? para hacer una actualización y luego vincularla de nuevo con invalidar consultas.
Así que, esto ya es un poco más complicado, pero, ya sabes, podemos llegar muy lejos solo con esas dos funciones. Así que, lo pongo justo aquí. Pero a medida que pasa el tiempo y tu aplicación se vuelve más compleja, podrías querer hacer más cosas. Así que, vas a hacer una actualización optimista, tal vez de vez en cuando, o necesitas una consulta infinita. Y esas APIs son ciertamente un poco más complejas. Y hasta arriba, tenemos, por ejemplo, nuestros plugins o las suscripciones de caché, que son realmente, realmente de bajo nivel. Por ejemplo, nuestras herramientas de desarrollo están construidas con las suscripciones de caché. Pero, ya sabes, una vez que llegas a un punto donde necesitas esta complejidad, probablemente estés feliz de que esas existan también, al igual que estás feliz de usar reduce de vez en cuando. Bien, y llegamos a esta API que evoluciona contigo a través de una planificación cuidadosa, muchas iteraciones, y también un par de versiones principales. Y eso me lleva directamente al primer aprendizaje que tuve como mantenedor de código abierto, que es que ya no me emocionan las versiones principales.
Comments