v0.2 Controller.fetch, getHeaders assíncrono, Collections
Collections permitem estender Arrays e Objects com facilidade fazendo push ou unshift de novos membros. O nome vem das Collections do Backbone.
Collections agora são o schema padrão de Resource.getList.
import { useController } from '@data-client/react'; import { TodoResource } from './TodoResource'; export default function CreateTodo({ userId }: { userId: number }) { const ctrl = useController(); const handleKeyDown = async e => { if (e.key === 'Enter') { ctrl.fetch(TodoResource.getList.push, { userId, title: e.currentTarget.value, id: Math.random(), }); e.currentTarget.value = ''; } }; return ( <div className="listItem nogap"> <label> <input type="checkbox" name="new" checked={false} disabled /> <input type="text" onKeyDown={handleKeyDown} /> </label> </div> ); }
Atualizar é bem simples, pois @data-client/rest/next e @data-client/react/next foram introduzidos
para permitir a adoção incremental das novas APIs alteradas neste lançamento. Isso torna a atualização em si uma simples
renomeação de imports.
Outros destaques incluem
@data-client/rest@data-client/react
Para todos os detalhes, continue lendo:
@data-client/react 0.2
https://github.com/reactive/data-client/releases/tag/%40data-client%2Freact%400.2.0
A atualização pode ser feita gradualmente, já que todas as mudanças foram lançadas inicialmente em /next.
-
Migre incrementalmente para as novas versões importando de
/nextimport { useController } from '@data-client/react/next'; -
Atualize para a v0.2 - v0.4 (todas compatíveis).
npm install --save @data-client/rest@0.4.3 -
Os imports podem ser atualizados incrementalmente após a atualização.
/nextexporta o mesmo que o nível superior.import { useController } from '@data-client/rest';
Mudanças
-
Controller.fetch(): 2545 Controller.fetch() retorna a forma desnormalizada quando o Endpoint tem um Schema
const handleChange = async e => {const todo = await ctrl.fetch(TodoResource.partialUpdate,{ id: todo.id },{ completed: e.currentTarget.checked },);// todo is Todo, we can use all its members and be type-safeconsole.log(todo.pk(), todo.title);}; -
NetworkManager: a interface do NetworkManager mudou para suportar apenas as novas ações 2690
-
Interfaces de SubscriptionManager/PollingSubscription simplificadas com base nas novas ações 2690
Remoções de itens descontinuados
- 2691: Remove DispatchContext, DenormalizeCacheContext
Descontinuações
- controller.receive, controller.receiveError 2690
- RECEIVE_TYPE 2690
- MiddlewareAPI.controller (MiddlewareAPI é simplesmente o próprio controller) 2690
({controller}) => {}->(controller) => {}
@data-client/rest 0.2
https://github.com/reactive/data-client/releases/tag/%40data-client%2Frest%400.2.0
A atualização pode ser feita gradualmente, já que todas as mudanças foram lançadas inicialmente em /next.
-
Migre incrementalmente para as novas versões importando de
/nextimport {RestEndpoint,createResource,GetEndpoint,MutateEndpoint,} from '@data-client/rest/next';Veja as migrações do diretório /examples como exemplo
-
Atualize para a v0.2-0.7 (todas compatíveis).
npm install --save @data-client/rest@0.7.6 -
Os imports podem ser atualizados incrementalmente após a atualização.
/nextexporta o mesmo que o nível superior.import { RestEndpoint, createResource } from '@data-client/rest';
Mudanças
-
getRequestInit e getHeaders do RestEndpoint podem opcionalmente retornar uma promise 2542
import { RestEndpoint } from '@data-client/rest/next';export default class AuthdEndpoint<O extends RestGenerics = any,> extends RestEndpoint<O> {declare static accessToken?: string;async getHeaders(headers: HeadersInit) {return {...headers,'Access-Token': await getOrFetchToken(),} as HeadersInit;}}export const TodoResource = createResource({urlPrefix: 'https://jsonplaceholder.typicode.com',path: '/todos/:id',schema: Todo,Endpoint: AuthdEndpoint,});BREAKING: Chamar super.getRequestInit() retornará uma promise - então você precisa resolvê-la:
class AuthdEndpoint<
O extends RestGenerics = any,
> extends RestEndpoint<O> {
getRequestInit(body: any): RequestInit {
return {
...super.getRequestInit(body),
credentials: 'same-origin',
};
}
}
class AuthdEndpoint<
O extends RestGenerics = any,
> extends RestEndpoint<O> {
async getRequestInit(body: any): Promise<RequestInit> {
return {
...(await super.getRequestInit(body)),
credentials: 'same-origin',
};
}
}
- createResource().getList usa uma Collection, à qual .create adiciona ao final 2593
Resource.createadicionará automaticamente à listaResource.getList.pushé idêntico aResource.create
- Remova qualquer
Endpoint.update, pois não é necessário e não funcionará
- Os parâmetros de
GetEndpointeMutateEndpointmudaram para o que eramNewGetEndpointeNewMutateEndpoint. - Os genéricos de createResource() mudaram para
O extends ResourceGenerics. Isso permite personalizar o tipo do Resource com body e searchParams 2593createGithubResource<U extends string, S extends Schema>->createGithubResource<O extends ResourceGenerics>
Remoções de itens descontinuados
- 2690: Removido o descontinuado
Endpoint.optimisticUpdate-> useEndpoint.getOptimisticResponse - 2688 Remove a compatibilidade com
FetchShape.
Suporte à atualização
Como sempre, se você tiver qualquer problema ou dúvida, fique à vontade para entrar no nosso ou abrir um bug
