Skip to main content
Version: 5.0

Schemas and Normalized data

Schemas are a declarative definition of how to process responses

import { Endpoint, Entity } from '@rest-hooks/endpoint';

class Todo extends Entity {
readonly id: number = 0;
readonly userId: number = 0;
readonly title: string = '';
readonly completed: boolean = false;

pk() {
return `${this.id}`;
}
}

const TodoDetail = new Endpoint(
({ id })fetch(`https://jsonplaceholder.typicode.com/todos/${id}`),
{ schema: Todo }
);

Entities

Entities have a primary key. This enables easy access via a lookup table. This makes it easy to find, update, create, or delete the same data - no matter what endpoint it was used in.

Entities cache

Mutations and Dynamic Data

import { schema, Endpoint } from '@rest-hooks/endpoint';

const todoCreate = new Endpoint(
(body: FormData) =>
fetch(`https://jsonplaceholder.typicode.com/todos/`, {
method: 'POST',
body,
}).then(res => res.json()),
{ schema: Todo, sideEffect: true },
);
Example Usage
import { useFetcher } from 'rest-hooks';

export default function NewTodoForm() {
const create = useFetcher(todoCreate);
return (
<Form onSubmit={e => create(new FormData(e.target))}>
<FormField name="title" />
</Form>
);
}

Mutations automatically update the normalized cache, resulting in consistent and fresh data.