0.11.4 โข Published 1 day ago
@data-client/redux v0.11.4
Asynchronous mutable data at scale. Performance, data integrity, and typing for REST, proto, GraphQL, websockets and more..
๐Read The Docs ย |ย ๐Getting Started ย |ย ๐ฎTodo Demo ย |ย ๐ฎGithub Demo
Simple TypeScript definition
class Article extends Entity {
readonly id: string = '';
readonly title: string = '';
readonly body: string = '';
pk() {
return this.id;
}
}
Create collection of API Endpoints
const ArticleResource = createResource({
path: '/articles/:id',
schema: Article,
})
One line data binding
const 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)}
/>
);
And subscriptions
const price = useSuspense(PriceResource.get, { symbol });
useSubscription(PriceResource.get, { symbol });
return price.value;
Programmatic queries
const sortedArticles = new schema.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 = useQuery(sortedArticles);
const articlesAscending = useQuery(sortedArticles, { asc: true });
const articlesDescending = useQuery(sortedArticles, { asc: false });
...all typed ...fast ...and consistent
Features
- Strong Typescript types
- ๐ React Suspense support
- ๐งต React 18 Concurrent mode compatible
- ๐ฃ 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
- ๐ฏ Declarative cache lifetime policy
Principals of Data Client
Integrity
- Strong inferred types
- Global referential equality guarantees
- Normalized store creates a single source of truth
- Strong invariants robust against race conditions
- Validation
Performance
- Stale While Revalidate configurable cache
- Only re-render
Composition over configuration
- Declarative data definitions
- Decoupled API definitions from usage
- Co-located data dependencies
- Centralized orchestration
- Extensible orchestration through Managers (middleware)
- Composable hooks
- subject pattern
- Suspense + concurrent mode async orchestration
Incremental Adoption
- Simple case is simple
- Scale as your app scales
0.11.4
1 day ago
0.11.0
19 days ago
0.10.0
3 months ago
0.9.9
5 months ago
0.9.7
7 months ago
0.9.4
7 months ago
0.9.3
7 months ago
0.9.2
8 months ago
0.9.0
8 months ago
0.8.1
8 months ago
0.8.0
8 months ago
0.2.2
8 months ago
0.2.1
9 months ago
0.2.0
9 months ago
1.0.0
9 months ago
0.1.4
9 months ago
0.1.3
10 months ago
0.1.2
10 months ago
0.1.1
10 months ago
0.1.0
10 months ago