Cuando uso el cliente Apollo, me resulta bastante tedioso actualizar manualmente el caché para cada mutación que requiere una actualización inmediata de la interfaz de usuario. Por lo tanto, decidí intentar crear un enlace personalizado que actualice el caché automáticamente.
El gancho funciona, pero parece un poco "incorrecto" y me preocupa que pueda interferir con el funcionamiento normal de la memoria caché. Entonces, solo quería preguntar si este gancho parece que debería funcionar bien.
Aquí está el código (donde MutationName es el nombre real de la mutationName de Graphql y fieldName es el nombre original de la consulta de Graphql correspondiente a la mutación):
export const useMutationWithCacheUpdate = ( mutation, mutationName, fieldName ) => { const [createMutation, { data, loading, error }] = useMutation(mutation, { update(cache, { data }) { data = data[mutationName]; cache.modify({ fields: { [fieldName]: (existingItems = []) => { const newItemRef = cache.writeFragment({ data: data, fragment: gql` fragment newItem on ${fieldName} { id type } `, }); return [...existingItems, newItemRef]; }, }, }); }, }); return [createMutation, { data, loading, error }]; };