@data-client/redux
TypeScript icon, indicating that this package has built-in type declarations

0.11.4 • Public • Published

Reactive Data Client

CircleCI Coverage Status npm downloads bundle size npm version PRs Welcome

Asynchronous mutable data at scale. Performance, data integrity, and typing for REST, proto, GraphQL, websockets and more..

class Article extends Entity {
  readonly id: string = '';
  readonly title: string = '';
  readonly body: string = '';

  pk() {
    return this.id;
  }
}
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>
  </>
);
const ctrl = useController();
return (
  <ArticleForm
    onSubmit={data => ctrl.fetch(ArticleResource.update, { id }, data)}
  />
);
const price = useSuspense(PriceResource.get, { symbol });
useSubscription(PriceResource.get, { symbol });
return price.value;
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

🏁Get started now

Features

Principals of Data Client

TS 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

Package Sidebar

Install

npm i @data-client/redux

Weekly Downloads

410

Version

0.11.4

License

Apache-2.0

Unpacked Size

111 kB

Total Files

45

Last publish

Collaborators

  • ntucker