Define your async methods. Use them synchronously in React. Instantly mutate the data and automatically update all usages.
For REST, GraphQL, Websockets+SSE and more
๐ Website
Installation
npm install @rest-hooks/react @rest-hooks/rest @rest-hooks/test
For more details, see the Installation docs page.
Usage
TypeScript definition
Simpleclass Article extends Entity {
id = '';
title = '';
body = '';
pk() {
return this.id;
}
}
collection of API Endpoints
Createconst ArticleResource = createResource({
path: '/articles/:id',
schema: Article,
})
data binding
One lineconst article = useSuspense(ArticleResource.get, { id });
return (
<>
<h2>{article.title}</h2>
<p>{article.body}</p>
</>
);
Mutation
const ctrl = useController();
return (
<ArticleForm
onSubmit={data => ctrl.fetch(ArticleResource.update, { id }, data)}
/>
);
Subscriptions
const price = useLive(PriceResource.get, { symbol });
return price.value;
Programmatic queries
const sortedArticles = new Query(
new schema.All(Article),
(entries, { asc } = { asc: false }) => {
const sorted = [...entries].sort((a, b) => a.title.localeCompare(b.title));
if (asc) return sorted;
return sorted.reverse();
}
);
const articlesUnsorted = useCache(sortedArticles);
const articlesAscending = useCache(sortedArticles, { asc: true });
const articlesDescending = useCache(sortedArticles, { asc: false });
...all typed ...fast ...and consistent
For the small price of 9kb gziped. ย ย
Features
-
Strong Typescript inference
-
๐ React Suspense support -
๐งต React 18 Concurrent mode compatible -
๐ฆ Partial Hydration Server Side Rendering -
๐ฃ Declarative API -
๐ Composition over configuration -
๐ฐ Normalized caching -
๐ฅ Tiny bundle footprint -
๐ Automatic overfetching elimination -
โจ Optimistic updates -
๐ง Flexible to fit any API design (one size fits all) -
๐ง Debugging and inspection via browser extension -
๐ณ Tree-shakable (only use what you need) -
๐ Subscriptions -
โป๏ธ Optional redux integration -
๐ Storybook mocking -
๐ฑ React Native support -
โ๏ธ NextJS support -
๐ฏ Declarative cache lifetime policy -
๐ง Composable middlewares -
๐ฝ Global data consistency guarantees -
๐ Automatic race condition elimination -
๐ฏ Global referential equality guarantees