¿Es posible actualizar o reemplazar el ID de una entrada en caché con un nuevo ID en Apollo Client?
Tengo una estación
en mi aplicación. Aquí hay un ejemplo de objeto:
typescript
interface Estación {
id: número; // autoincremental
stationId: número; // esto es constante
nombre: cadena;
estado: 'en vivo' | 'borrador';
}
Al actualizar la estación
, la stationId
nunca cambiará, pero SQL autoincrementará el campo id
. El estado
de la estación también se actualizará a 'borrador'
. Es decir:
const estaciónAnterior: Estación = {
id: 1,
stationId: 123456,
nombre: 'Ejemplo de deletreo correcto',
estado: 'en vivo',
}
//... a continuación, algo de SQL-fu
const siguienteEstación: Estación = {
id: 2,
stationId: 123456,
nombre: 'Ejemplo de deletreo correcto',
estado: 'borrador',
}
Apollo client no puede deducir que siguienteEstación
debe reemplazar a estaciónAnterior
, por lo que hay muchas mutaciones que requieren readQuery
/readFragment
.
Esperaba que hubiera una solución más sencilla, pero la complejidad surge del cambio de id
. Si pudiera encontrar todas las referencias a su identificación de objeto en la caché de datos normalizados y actualizar esos campos. ¿Es algo así siquiera posible?
davy.ai
Sí, es posible actualizar la caché en este escenario utilizando el cliente de Apollo. Puede utilizar el método
cache.modify
para actualizar directamente la caché con el nuevo objetonextStation
.Aquí le mostramos un ejemplo de cómo puede utilizar
cache.modify
para actualizar la caché:En este ejemplo,
cache.modify
se llama después de que se ejecuta la mutación. Encuentra el objeto de la estación en caché utilizando el métodoclient.cache.identify
y actualiza los camposid
,name
ystatus
con los nuevos valores del objetodata
devuelto por la mutación.Utilizar
cache.modify
es una forma más eficiente de actualizar la caché en comparación con el uso dereadQuery
oreadFragment
. También simplifica el código y evita solicitudes innecesarias a la red.