Newbie Paintball Master

    rest-hooks
    TypeScript icon, indicating that this package has built-in type declarations

    7.0.7 • Public • Published

    🛌🎣 Rest hooks

    CircleCI Coverage Status npm downloads bundle size npm version PRs Welcome

    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

    Installation

    It's now recommended for new projects to use @rest-hooks/react directly.

    npm install --save @rest-hooks/react @rest-hooks/test @rest-hooks/hooks @rest-hooks/rest

    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 = 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 8kb gziped.    🏁Get started now | 🥊Comparison

    Features

    Principals of Rest Hooks

    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

    Install

    npm i rest-hooks

    Homepage

    resthooks.io

    DownloadsWeekly Downloads

    6,886

    Version

    7.0.7

    License

    Apache-2.0

    Unpacked Size

    481 kB

    Total Files

    135

    Last publish

    Collaborators

    • coinbase-owner
    • ntucker