Saltar al contenido principal

useCache()

Renderizado de datos sin el fetch.

Accede a la respuesta de cualquier Endpoint. Devuelve undefined hasta que se obtiene, se establece o se puede inferir a partir de las entities que ya están en el store, y de nuevo tras una invalidación (consulta Comportamiento). Eso significa "no cargado", no "no existe en el servidor", así que úsalo para datos que carga otro código, como el usuario actual que obtiene un flujo de inicio de sesión.

useCache() reacciona a las mutaciones de los datos y vuelve a renderizar solo cuando es necesario.

Uso​

<script setup lang="ts">
  import { useCache } from '@data-client/vue';
  import { UserResource } from './UserResource';
  import Unauthed from './Unauthed.vue';
  import Authorized from './Authorized.vue';

  // currentUser as ComputedRef<User | undefined>
  const currentUser = useCache(UserResource.current);
</script>

<template>
  <!-- currentUser is unwrapped in the template -->
  <Authorized v-if="currentUser" :user="currentUser" />
  <!-- user is not logged in -->
  <Unauthed v-else />
</template>

Consulta el estrechamiento por veracidad para más información sobre el manejo de tipos

Comportamiento​

useCache() devuelve un ComputedRef. La tabla de abajo describe su .value.

Estado de caducidadDevuelveCondiciones
Inválidoundefinedno está en el store, eliminación, invalidación, invalidIfStale
Obsoletodesnormalizado(primer render, cambio de argumentos) & caducidad < ahora
Válidodesnormalizadofinalización del fetch
undefinednull usado como segundo argumento
Dependencias condicionales

Usar null como segundo argumento de cualquier hook de Data Client significa "no hacer nada".

// todo could be undefined if id is undefined
const todo = useCache(
TodoResource.get,
computed(() => (id.value ? { id: id.value } : null)),
);

Tipos​

function useCache(
endpoint: ReadEndpoint,
...args: MaybeRefsOrGetters<Parameters<typeof endpoint.key>> | [null]
): ComputedRef<DenormalizeNullable<typeof endpoint.schema>>;

Los argumentos pueden ser valores simples, refs (incluidos los computed) o funciones getter como () => ({ id: props.id }). Un objeto simple como { id: props.id } se lee una sola vez y no seguirá los cambios de props ni de ruta, así que usa un getter o computed cuando un argumento pueda cambiar.

El resultado se actualiza cuando cambian los argumentos.