All
Obtiene todas las entities de la caché como un Array.
definition: obligatorio Una única Entity que contiene este array o una asociación de valores de atributo a Entities.schemaAttribute: opcional (obligatorio sidefinitionno es un schema único) El atributo de cada entity encontrada que define qué schema, según la asociación de definiciones, se usará al normalizar. Puede ser un string o una función. Si se le da una función, acepta los siguientes argumentos: _value: El valor de entrada de la entity. _parent: El objeto padre del array de entrada. *key: La clave con la que el array de entrada aparece en el objeto padre.
Métodos de instancia
define(definition): Al usarse, ladefinitionrecibida se combinará con la definición original pasada al constructor deAll. Este método suele ser útil para crear referencias circulares en el schema.
Uso
Para describir un array simple de un único tipo de entity:
Fixtures
GET /users
[{"id":"123","name":"Jim"},{"id":"456","name":"Jane"}]
POST /users
{"id":"777","name":"ABC"}
▶api/User
▶NewUser
▶UsersPage.tsx
import { RestEndpoint, All } from '@data-client/rest'; import { useSuspense } from '@data-client/react'; import { User } from './api/User'; import NewUser from './NewUser'; const getUsers = new RestEndpoint({ path: '/users', schema: new All(User), }); function UsersPage() { const users = useSuspense(getUsers); return ( <div> {users.map(user => ( <div key={user.pk()}>{user.name}</div> ))} <NewUser /> </div> ); } render(<UsersPage />);
Resultado
Store▶
Tipos polimórficos
Si tus datos de entrada son un array con más de un tipo de entity, es necesario definir una asociación de schemas.
nota
Si tus datos devuelven un objeto para el que no proporcionaste una asociación, el objeto original se devolverá en el resultado y no se creará una entity.
schemaAttribute de tipo string
Fixtures
GET /feed
[{"id":1,"type":"link","url":"https://ntucker.true.io","title":"Nate site"},{"id":10,"type":"post","content":"good day!"}]
▶api/Feed
import { Entity, RestEndpoint, All } from '@data-client/rest'; export abstract class FeedItem extends Entity { readonly id: number = 0; declare readonly type: 'link' | 'post'; } export class Link extends FeedItem { readonly type = 'link' as const; readonly url: string = ''; readonly title: string = ''; } export class Post extends FeedItem { readonly type = 'post' as const; readonly content: string = ''; } export const getFeed = new RestEndpoint({ path: '/feed', schema: new All( { link: Link, post: Post, }, 'type', ), });
▶FeedList
Resultado
Store▶
schemaAttribute de tipo función
Los valores devueltos deben coincidir con una clave de definition. Aquí mostraremos el mismo comportamiento que en el caso
de 'string', salvo que añadiremos una 's' al final.
Fixtures
GET /feed
[{"id":1,"type":"link","url":"https://ntucker.true.io","title":"Nate site"},{"id":10,"type":"post","content":"good day!"}]
▶api/Feed
import { Entity, RestEndpoint, All } from '@data-client/rest'; export abstract class FeedItem extends Entity { readonly id: number = 0; declare readonly type: 'link' | 'post'; } export class Link extends FeedItem { readonly type = 'link' as const; readonly url: string = ''; readonly title: string = ''; } export class Post extends FeedItem { readonly type = 'post' as const; readonly content: string = ''; } export const getFeed = new RestEndpoint({ path: '/feed', schema: new All( { links: Link, posts: Post, }, (input: Link | Post, parent: unknown, key: string) => `${input.type}s`, ), });
▶FeedList
Resultado
Store▶