useCache()
Renderização de dados sem o fetch.
Acessa a resposta de qualquer Endpoint. Se a resposta não existir, retorna
undefined. Isso pode ser usado para verificar a existência de um Endpoint's, como para autenticação.
useCache() reage às mutações de dados; renderizando novamente apenas quando necessário.
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>
Veja truthiness narrowing para mais informações sobre o tratamento de tipos
Comportamento
useCache() retorna um ComputedRef. A tabela
abaixo descreve seu .value.
| Status de expiração | Retorna | Condições |
|---|---|---|
| Invalid | undefined | não está no store, exclusão, invalidação, invalidIfStale |
| Stale | desnormalizado | (primeira renderização, mudança de argumentos) & expiração < agora |
| Valid | desnormalizado | conclusão do fetch |
undefined | null usado como segundo argumento |
Usar null como segundo argumento de qualquer hook do Data Client significa "não fazer 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>>;
Os argumentos podem ser valores simples, refs (incluindo computed) ou funções getter
como () => ({ id: props.id }). Um objeto simples como { id: props.id } é lido uma única vez e não
acompanha mudanças de props ou de rota, então use um getter ou computed quando um argumento puder mudar.
O resultado é atualizado quando os argumentos mudam.