useCancelling()
function useCancelling<
E extends EndpointInterface & {
extend: (o: { signal?: AbortSignal }) => any;
},
>(endpoint: E, ...args: readonly [...Parameters<E>] | readonly [null]): E {
Builds an Endpoint that cancels fetch everytime params change
Aborts inflight request if the parameters change.
▶api/Todo.ts
▶TodoDetail.tsx
import { useSuspense } from '@rest-hooks/react';import { useCancelling } from '@rest-hooks/hooks';import { TodoResource } from './api/Todo';export default function TodoDetail({ id }: { id: number }) {const todo = useSuspense(useCancelling(TodoResource.get, { id }), { id });return <div>{todo.title}</div>;}
▶Demo
Try clicking the +
very quickly. If you increment before it resolves the request will be cancelled and you should
not see results in the store.
Warning
Be careful when using this with many disjoint components fetching the same arguments (Endpoint/params pair) to useSuspense(). This solution aborts fetches per-component, which means you might end up canceling a fetch that another component still cares about.
Part of @rest-hooks/hooks