5.2.1 • Published 8 months ago

@rest-hooks/core v5.2.1

Weekly downloads
19,877
License
Apache-2.0
Repository
github
Last release
8 months ago

🛌🎣 Rest hooks

CircleCI Coverage Status npm downloads bundle size npm version PRs Welcome

Reducer/flux normalized, framework-agnostic data store. Includes managers/middleware, global referential equality guarantees, automatic expiry policies, data normalization. Consumes TypeScript Standard Endpoints

📖Read The Docs  |  🏁Getting Started  |  🎮Todo Demo  |  🎮Github Demo

Framework Implementations

Sample React Hook suspense implementation

function useSuspense(endpoint, ...args)
  const state = useCacheState();
  const controller = useController();

  const key = args[0] !== null ? endpoint.key(...args) : '';
  const cacheResults = key && state.results[key];
  const meta = state.meta[key];

  // Compute denormalized value
  const { data, expiryStatus, expiresAt } = useMemo(() => {
    return controller.getResponse(endpoint, ...args, state);
  }, [
    cacheResults,
    state.indexes,
    state.entities,
    state.entityMeta,
    meta,
    key,
  ]);

  const error = controller.getError(endpoint, ...args, state);

  // If we are hard invalid we must fetch regardless of triggering or staleness
  const forceFetch = expiryStatus === ExpiryStatus.Invalid;

  const maybePromise = useMemo(() => {
    // null params mean don't do anything
    if ((Date.now() <= expiresAt && !forceFetch) || !key) return;

    return controller.fetch(endpoint, ...args);
    // we need to check against serialized params, since params can change frequently
  }, [expiresAt, controller, key, forceFetch, state.lastReset]);

  // fully "valid" data will not suspend even if it is not fresh
  if (expiryStatus !== ExpiryStatus.Valid && maybePromise) {
    throw maybePromise;
  }

  if (error) throw error;

  return data;
}
4.4.3

10 months ago

5.0.0

10 months ago

5.1.0

9 months ago

5.2.1

8 months ago

5.2.0

9 months ago

4.4.1

12 months ago

4.4.0

12 months ago

4.4.2

11 months ago

4.3.2

1 year ago

4.3.1

1 year ago

4.2.10

1 year ago

4.2.11

1 year ago

4.3.0

1 year ago

4.2.5

1 year ago

4.4.0-next.0

1 year ago

4.2.7

1 year ago

4.2.6

1 year ago

4.2.9

1 year ago

4.2.8

1 year ago

4.2.3

1 year ago

4.2.2

1 year ago

4.2.4

1 year ago

4.2.1

1 year ago

4.2.0

1 year ago

4.1.4

1 year ago

4.1.3

1 year ago

4.1.6

1 year ago

4.1.5

1 year ago

4.1.2

1 year ago

4.1.1

1 year ago

4.0.1

1 year ago

4.0.0

1 year ago

4.0.2

1 year ago

3.4.0-beta.6

1 year ago

3.4.0-beta.5

1 year ago

3.4.0-beta.4

1 year ago

3.4.0-beta.3

1 year ago

3.4.0-beta.2

1 year ago

3.4.0-beta.1

1 year ago

3.4.0-beta.0

1 year ago

3.4.0

1 year ago

4.1.0-beta.0

1 year ago

3.3.1

2 years ago

3.3.2

2 years ago

4.1.0

1 year ago

3.3.0-beta.0

2 years ago

3.3.0-beta.2

2 years ago

3.3.0-beta.1

2 years ago

3.2.11

2 years ago

3.2.10

2 years ago

3.3.0

2 years ago

3.2.6

2 years ago

3.2.5

2 years ago

3.2.9

2 years ago

3.2.8

2 years ago

3.2.7

2 years ago

3.2.4

2 years ago

3.2.5-beta.0

2 years ago

3.2.2

2 years ago

3.2.1

2 years ago

3.2.0

2 years ago

3.2.3

2 years ago

1.5.5

2 years ago

3.1.2

2 years ago

3.1.1

2 years ago

3.1.0

2 years ago

3.1.0-beta.9

2 years ago

3.1.0-beta.8

2 years ago

3.1.0-beta.3

2 years ago

3.1.0-beta.4

2 years ago

3.1.0-beta.5

2 years ago

3.1.0-beta.6

2 years ago

3.1.0-beta.7

2 years ago

3.1.0-beta.2

2 years ago

3.1.0-beta.1

2 years ago

2.2.2

3 years ago

3.0.2

3 years ago

3.0.1

3 years ago

3.0.0

3 years ago

3.1.0-beta.0

3 years ago

2.2.1

3 years ago

2.2.0

3 years ago

2.1.0

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

1.5.4

3 years ago

2.0.0-beta.6

3 years ago

2.0.0-beta.5

3 years ago

2.0.0-beta.4

3 years ago

2.0.0-beta.3

3 years ago

2.0.0-beta.2

3 years ago

1.5.3

3 years ago

2.0.0-beta.1

3 years ago

2.0.0-beta.0

3 years ago

1.5.2

3 years ago

1.5.1

3 years ago

1.5.0

3 years ago

1.4.1

3 years ago

1.4.0

3 years ago

1.3.0

3 years ago

1.2.0

3 years ago

1.2.1

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.1.2

3 years ago

1.0.17-beta.0

3 years ago

1.0.16

3 years ago

1.0.15

3 years ago

1.0.14

3 years ago

1.0.13

3 years ago

1.0.13-beta.0

3 years ago

1.0.12

3 years ago

1.0.11

3 years ago

1.0.10

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago

1.0.0-rc.1

3 years ago

1.0.0-rc.0

3 years ago

1.0.0-k.5

3 years ago

1.0.0-k.4

3 years ago

1.0.0-k.3

4 years ago

1.0.0-k.2

4 years ago

1.0.0-k.1

4 years ago

1.0.0-k.0

4 years ago

1.0.0-j.7

4 years ago

1.0.0-j.6

4 years ago

1.0.0-j.5

4 years ago

1.0.0-j.4

4 years ago

1.0.0-j.3

4 years ago

1.0.0-j.2

4 years ago

1.0.0-j.0

4 years ago

1.0.0-j.1

4 years ago

1.0.0-i.4

4 years ago

1.0.0-i.2

4 years ago

1.0.0-i.3

4 years ago

1.0.0-i.1

4 years ago

1.0.0-i.0

4 years ago

1.0.0-h.0

4 years ago

1.0.0-delta.0

4 years ago

1.0.0-gamma.0

4 years ago

1.0.0-beta.15

4 years ago

1.0.0-beta.14

4 years ago

1.0.0-beta.13

4 years ago

1.0.0-beta.12

4 years ago

1.0.0-beta.11

4 years ago

1.0.0-beta.10

4 years ago

1.0.0-beta.9

4 years ago

1.0.0-beta.7

4 years ago

1.0.0-beta.8

4 years ago

1.0.0-beta.6

4 years ago

1.0.0-beta.3

4 years ago

1.0.0-beta.4

4 years ago

1.0.0-beta.5

4 years ago

1.0.0-beta.2

4 years ago

1.0.0-beta.1

4 years ago