Saltar al contenido principal

useCache()

Renderizado de datos sin el fetch.

Accede a la respuesta de cualquier Endpoint. Si la respuesta no existe, devuelve undefined. Esto puede usarse para comprobar la existencia de un Endpoint's, por ejemplo para la autenticación.

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

Uso​

import { useCache } from '@data-client/react';
import { UserResource } from './UserResource';
import Unauthed from './Unauthed';
import Authorized from './Authorized';

function AuthorizedPage() {
  // currentUser as User | undefined
  const currentUser = useCache(UserResource.current);
  // user is not logged in
  if (!currentUser) return <Unauthed />;
  // currentUser as User (typeguarded)
  return <Authorized user={currentUser} />;
}
render(<AuthorizedPage />);
Resultado
Store▶

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

Comportamiento​

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, id ? { id } : null);

Tipos​

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

Ejemplos​

Inicio y cierre de sesión en la barra de navegación de Github​

Nuestro usuario actual solo existe cuando estamos autenticados. Por lo tanto, podemos usar useCache(UserResource.current) para determinar si se muestran los botones de navegación de inicio o de cierre de sesión.

Explora el ejemplo github-app

More Demos

Autorización de comentarios en Github​

Aquí solo mostramos el formulario de comentarios si el usuario está autenticado.

Explora el ejemplo github-app

More Demos