0.11.4 • Published 2 days ago
@data-client/core v0.11.4
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.endpoints[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;
}
API
- Controller
- Middleware: LogoutManager, NetworkManager, SubscriptionManager, PollingSubscription, DevToolsManager
- State: createReducer(), initialState, applyManager
0.11.4
2 days ago
0.11.0
20 days ago
0.10.0
3 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.4.3
8 months ago
0.4.2
8 months ago
0.4.1
9 months ago
0.4.0
9 months ago
0.3.0
9 months ago
0.2.1
9 months ago
0.2.0
10 months ago
0.1.0
10 months ago