v0.2 Controller.fetch, getHeaders asíncrono, Collections
Las Collections permiten extender fácilmente Arrays y Objects agregando nuevos miembros con push o unshift. El nombre proviene de las Collections de Backbone.
Las Collections son ahora el schema predeterminado 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> ); }
Actualizar es bastante sencillo, ya que se introdujeron @data-client/rest/next y @data-client/react/next
para permitir la adopción incremental de las nuevas APIs que cambian en esta versión. Esto convierte la actualización en sí en un simple
cambio de nombre en los imports.
Otros aspectos destacados incluyen
@data-client/rest@data-client/react
Para todos los detalles, sigue leyendo:
@data-client/react 0.2
https://github.com/reactive/data-client/releases/tag/%40data-client%2Freact%400.2.0
La actualización puede hacerse de forma gradual, ya que todos los cambios se publicaron inicialmente en /next.
-
Migra de forma incremental a las nuevas versiones importando desde
/nextimport { useController } from '@data-client/react/next'; -
Actualiza a v0.2 - v0.4 (todas compatibles).
npm install --save @data-client/rest@0.4.3 -
Los imports pueden actualizarse de forma incremental después de la actualización.
/nextexporta lo mismo que el nivel superior.import { useController } from '@data-client/rest';
Cambios
-
Controller.fetch(): 2545 Controller.fetch() devuelve la forma desnormalizada cuando el Endpoint tiene un 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: La interfaz de NetworkManager cambió para admitir solo las nuevas acciones 2690
-
Las interfaces de SubscriptionManager/PollingSubscription se simplificaron con base en las nuevas acciones 2690
Eliminación de elementos obsoletos
- 2691: Se eliminan DispatchContext y DenormalizeCacheContext
Deprecaciones
- controller.receive, controller.receiveError 2690
- RECEIVE_TYPE 2690
- MiddlewareAPI.controller (MiddlewareAPI es simplemente el propio controller) 2690
({controller}) => {}->(controller) => {}
@data-client/rest 0.2
https://github.com/reactive/data-client/releases/tag/%40data-client%2Frest%400.2.0
La actualización puede hacerse de forma gradual, ya que todos los cambios se publicaron inicialmente en /next.
-
Migra de forma incremental a las nuevas versiones importando desde
/nextimport {RestEndpoint,createResource,GetEndpoint,MutateEndpoint,} from '@data-client/rest/next';Consulta las migraciones del directorio /examples como ejemplo
-
Actualiza a v0.2-0.7 (todas compatibles).
npm install --save @data-client/rest@0.7.6 -
Los imports pueden actualizarse de forma incremental después de la actualización.
/nextexporta lo mismo que el nivel superior.import { RestEndpoint, createResource } from '@data-client/rest';
Cambios
-
getRequestInit y getHeaders de RestEndpoint pueden devolver opcionalmente una promesa 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: Llamar a super.getRequestInit() devolverá una promesa, así que debes resolverla:
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 una Collection, a la que .create agrega elementos 2593
Resource.createagregará automáticamente a la listaResource.getList.pushes idéntico aResource.create
- Elimina cualquier
Endpoint.update, ya que no es necesario y no funcionará
- Los parámetros de
GetEndpointyMutateEndpointcambiaron a lo que eranNewGetEndpointyNewMutateEndpoint. - Los genéricos de createResource() cambiaron a
O extends ResourceGenerics. Esto permite personalizar el tipo del Resource con body y searchParams 2593createGithubResource<U extends string, S extends Schema>->createGithubResource<O extends ResourceGenerics>
PR #2692 que incorpora /next al nivel superior
Eliminación de elementos obsoletos
- 2690: Se elimina el obsoleto
Endpoint.optimisticUpdate-> usaEndpoint.getOptimisticResponse - 2688 Se elimina la compatibilidad con
FetchShape.
Soporte para la actualización
Como siempre, si tienes algún problema o pregunta, no dudes en unirte a nuestro o reportar un error
