Es realmente simple de hacer. Nuevamente, como vimos, todos esos objetos están en este hash. Podemos agarrarlos fácilmente por su identificador y fusionar estos nuevos campos. Y esto es lo que sucederá con mayor frecuencia.
Pero el segundo caso es si tienes una lista o una colección de entidades y devuelves todas ellas con todos sus identificadores y todos los campos que deben actualizarse. Entonces, esto no funciona si devuelves, digamos, algunos de ellos o solo uno de ellos. Debes devolver toda la colección para actualizar cada uno de ellos. Así que hablemos de cuando no funciona, porque estos son los casos en los que nos encontramos y es una situación realmente fea.
Entonces, primero, supongamos que tu respuesta data que está llegando no está relacionada con la actualización que deseas que ocurra. Así que sé que hubo algunas situaciones en las que teníamos un objeto que íbamos a marcar como favorito, como un producto que se estaba marcando como favorito. Y lo marcaste como favorito, la mutación se envía, vuelve. Devuelves el ID y el estado de favorito, y eso se actualiza y se actualizará ese producto dondequiera que se esté utilizando en esa interfaz de usuario. Lo que no se actualizará es cuántos productos están marcados como favoritos. Digamos que tenías una interfaz de usuario que mostraba el número de objetos marcados como favoritos. Puede estar relacionado, pero no es el mismo data. Entonces, en este escenario, tendrías que escribir tu propia función de actualización y actualizar ese data tú mismo, aunque te parezca relacionado.
Luego, el resto de estos se trata de listas, porque eso es realmente lo más difícil de gestionar, donde, nuevamente, si no devuelves toda la lista de objetos actualizados, no obtendrás esa actualización automática. Lo mismo ocurre si cambia el orden. Entonces, si enviaras, digamos, objetos en el orden 1, 2, 3, 4, y lo cambias a 1, 2, 4, 3, cuando regrese, los objetos siguen siendo los mismos. Lo único que cambia es el orden. No se reflejará en tu interfaz de usuario. Eso es algo que tendrías que escribir automáticamente. Y principalmente porque la caché no hace suposiciones sobre cómo quieres almacenar tus data o cómo debería verse tu data dentro de la caché. Esos objetos son idénticos. Y lo único a lo que hace referencia son las referencias a esos objetos. Y finalmente, agregar o eliminar cosas, lo cual también es realmente molesto, porque si fuera a desmarcar algo como favorito, puedo actualizar el estado de favorito de ese objeto, pero no puedo eliminarlo de una lista de objetos favoritos. Eso es algo para lo que tendrías que escribir una función de actualización, porque, nuevamente, no sabe que no puedes devolver algo de una mutación y decir, OK, sí, ahora elimina esto por mí. Solo puedes devolver algo. Entonces, nuevamente, las funciones de actualización existen para hacer eso, pero en estos escenarios, como, puede ser un error si no esperas que se actualice automáticamente. Y definitivamente nos hemos encontrado con eso.
Comments