useDLE()
- Type
- With Generics
function useDLE(
endpoint: ReadEndpoint,
...args: Parameters<typeof endpoint> | [null]
): {
data: Denormalize<typeof endpoint.schema>;
loading: boolean;
error: Error | undefined;
};
function useDLE<
E extends EndpointInterface<FetchFunction, Schema | undefined, undefined>,
Args extends readonly [...Parameters<E>] | readonly [null],
>(
endpoint: E,
...args: Args
): {
data: DenormalizeNullable<typeof endpoint.schema>;
loading: boolean;
error: Error | undefined;
};
In case you cannot use suspense, useDLE() is just like useSuspense() but returns [D]ata [L]oading [E]rror values.
Hook usage
Fixtures
GET /profiles
[{"id":"1","fullName":"Einstein","bio":"Smart physicist"},{"id":"2","fullName":"Elon Musk","bio":"CEO of Tesla, SpaceX and owner of Twitter"}]
▶api/Profile.ts
▶ProfileList.tsx
import { useDLE } from '@rest-hooks/react';import { ProfileResource } from './api/Profile';function ProfileList(): JSX.Element {const { data, loading, error } = useDLE(ProfileResource.getList);if (error) return <div>Error {error.status}</div>;if (loading || !data) return <>loading...</>;return (<div>{data.map(profile => (<div key={profile.pk()}><h4>{profile.fullName}</h4><p>{profile.bio}</p></div>))}</div>);}render(<ProfileList />);
Conditional Dependencies
Use null
as the second argument on any rest hooks to indicate "do nothing."
// todo could be undefined if id is undefined
const todo = useDLE(getTodo, id ? { id } : null);