Pular para o conteúdo principal

Snapshot

Snapshots são passados para funções definidas pelo usuário que calculam atualizações de estado. Eles permitem acesso seguro e eficiente aos dados desnormalizados com base no estado atual.

interface Snapshot {
get(schema, ...args)​ => DenormalizeNullable<typeof schema> | undefined;
getResponse(endpoint, ...args)​ => { data, expiryStatus, expiresAt };
getError(endpoint, ...args)​ => ErrorTypes | undefined;
fetchedAt: number;
abort: Error;
}
dica

Use Controller.snapshot() para construir um snapshot

Uso​

import { resource } from '@data-client/rest';
import { Post } from './Post';

export { Post };

export const PostResource = resource({
  path: '/posts/:id',
  searchParams: {} as { userId?: string | number } | undefined,
  schema: Post,
}).extend('vote', {
  path: '/posts/:id/vote',
  method: 'POST',
  body: undefined,
  schema: Post,
  getOptimisticResponse(snapshot, { id }) {
    const post = snapshot.get(Post, { id });
    if (!post) throw snapshot.abort;
    return {
      id,
      votes: post.votes + 1,
    };
  },
});
Resultado
Store▶

Membros​

get(schema, ...args)​

Busca qualquer Schema Queryable.

getResponse(endpoint, ...args)​

returns
{
data: DenormalizeNullable<E['schema']>;
expiryStatus: ExpiryStatus;
expiresAt: number;
}

Obtém a resposta (globalmente estável por referência) de um par endpoint/args a partir do estado fornecido.

data​

Os dados de resposta desnormalizados. Garante estabilidade referencial global para todos os membros.

expiryStatus​

export enum ExpiryStatus {
Invalid = 1,
InvalidIfStale,
Valid,
}
Valid​
  • Nunca suspende.
  • Pode fazer fetch se os dados estiverem desatualizados
InvalidIfStale​
  • Suspende se os dados estiverem desatualizados.
  • Pode fazer fetch se os dados estiverem desatualizados
Invalid​
  • Sempre suspende
  • Sempre faz fetch

expiresAt​

Um número que representa o momento em que expira. Compare com Date.now().

getError(endpoint, ...args)​

Obtém o erro, se houver, de um determinado endpoint. Retorna undefined quando não há erros.

fetchedAt​

Quando o fetch que resultou neste snapshot foi chamado.

abort​

Este é um Error a ser lançado em Endpoint.getOptimisticResponse() para cancelar uma atualização otimista.