All
Recupera todas as entidades no cache como um Array.
definition: obrigatório Uma Entity singular que este array contém ou um mapeamento de valores de atributo para Entities.schemaAttribute: opcional (obrigatório sedefinitionnão for um schema singular) O atributo de cada entidade encontrada que define qual schema, conforme o mapeamento da definição, usar na normalização. Pode ser uma string ou uma função. Se for uma função, recebe os seguintes argumentos: _value: O valor de entrada da entidade. _parent: O objeto pai do array de entrada. *key: A chave sob a qual o array de entrada aparece no objeto pai.
Métodos de instância
define(definition): Quando usado, odefinitioninformado será mesclado com a definição original passada ao construtor deAll. Este método costuma ser útil para criar referências circulares no schema.
Uso
Para descrever um array simples de um único tipo de entidade:
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
Se os seus dados de entrada são um array com mais de um tipo de entidade, é necessário definir um mapeamento de schema.
observação
Se os seus dados retornarem um objeto para o qual você não forneceu um mapeamento, o objeto original será retornado no resultado e nenhuma entidade será criada.
schemaAttribute 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 função
Os valores retornados devem corresponder a uma chave em definition. Aqui mostraremos o mesmo comportamento do caso
'string', exceto que acrescentaremos um 's'.
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▶