# Data Client for React
> Reactive Data Client: async state management for React with normalized, type-safe data from REST, GraphQL, and any other source.
Packages: @data-client/react, @data-client/rest, @data-client/graphql. Using Vue? See https://dataclient.io/vue/llms.txt
## Core
- [Introducing the Reactive Data Client](https://dataclient.io/docs.md): Building delightful dynamic applications with NextJS, Expo, React Native and more.
- [Controller - Typesafe imperative store access](https://dataclient.io/docs/api/Controller.md)
- [Snapshot - Safe data access with zero race conditions](https://dataclient.io/docs/api/Snapshot.md)
- [TypeScript Types](https://dataclient.io/docs/api/types.md)
## Core › Getting Started
- [Agent Skills](https://dataclient.io/docs/getting-started/agent-skills.md)
- [Getting Started with Reactive Data Client](https://dataclient.io/docs/getting-started/installation.md)
- [Defining Resources for Reactive Data Client](https://dataclient.io/docs/getting-started/resource.md)
- [Rendering Asynchronous Data in React](https://dataclient.io/docs/getting-started/data-dependency.md)
- [Mutating Asynchronous Data in React](https://dataclient.io/docs/getting-started/mutations.md): Safe and high performance data mutations without refetching or writing state management.
- [Debugging and Inspection](https://dataclient.io/docs/getting-started/debugging.md)
## Core › Concepts
- [Entity and Data Normalization](https://dataclient.io/docs/concepts/normalization.md)
- [Controlling automatic fetch behavior with declarative Expiry Policies](https://dataclient.io/docs/concepts/expiry-policy.md): When data is considere Fresh, Stale, or Invalid. And how that state affects fetching and rendering.
- [Distinguishing recoverable fetch errors in React](https://dataclient.io/docs/concepts/error-policy.md): Controlling how errors affect revalidation strategies in Reactive Data Client.
- [Validating fetch responses in React](https://dataclient.io/docs/concepts/validation.md)
- [⚛ Atomic Mutations: Safe, high performance async mutations](https://dataclient.io/docs/concepts/atomic-mutations.md)
- [Centralized side-effect orchestration with React](https://dataclient.io/docs/concepts/managers.md): Safe programmatic access to the global store. Enables fully extensible and scalable side-effects.
- [Performance](https://dataclient.io/docs/concepts/performance.md)
## Core › Tooling
- [Mocking data for Storybook](https://dataclient.io/docs/guides/storybook.md)
- [Unit testing hooks](https://dataclient.io/docs/guides/unit-testing-hooks.md)
- [Unit testing components](https://dataclient.io/docs/guides/unit-testing-components.md)
## Core › Guides
- [React 18 Suspense with Images and other Media](https://dataclient.io/docs/guides/img-media.md)
- [TypeScript Standard Endpoints](https://dataclient.io/docs/guides/custom-protocol.md)
- [Empowering Redux with Reactive Data Client](https://dataclient.io/docs/guides/redux.md)
## Core › Guides › Performance
- [Server Side Rendering with NextJS, Express, and more](https://dataclient.io/docs/guides/ssr.md)
- [Render as you Fetch](https://dataclient.io/docs/guides/render-as-you-fetch.md)
- [Aborting Fetch](https://dataclient.io/docs/guides/abort.md)
## Core › Guides › Legacy
- [Using hooks with class components](https://dataclient.io/docs/guides/class-components.md)
- [Legacy browser support](https://dataclient.io/docs/guides/legacy-browser.md)
## Core › Hooks
- [useSuspense() - Simplified data fetching for React](https://dataclient.io/docs/api/useSuspense.md): High performance async data rendering without overfetching. useSuspense() is like await for React components.
- [useController() - Type safe store manipulation in React](https://dataclient.io/docs/api/useController.md): Controller provides type-safe methods to access and dispatch actions to the store.
- [useCache() - Normalized data store access in React](https://dataclient.io/docs/api/useCache.md): Data rendering without the fetch. Access any Endpoint's response.
- [useQuery() - Normalized data store access in React](https://dataclient.io/docs/api/useQuery.md): Data rendering without the fetch. Access any Schema's memoized store value.
- [useLive() - Rendering dynamic data in React](https://dataclient.io/docs/api/useLive.md): Async rendering of remotely triggered data mutations. useSuspense() + useSubscription() in one hook.
- [useSubscription() - Updating frequent data changes in React](https://dataclient.io/docs/api/useSubscription.md): Keeps data fresh, but only when component is active. Supports polling, websockets, and SSE.
- [useFetch() - Declarative fetch triggers for React](https://dataclient.io/docs/api/useFetch.md): Fetch and read endpoint data with React.use(). Suspend on fetch, return denormalized data, re-suspend on invalidation.
- [useDLE() - [D]ata [L]oading [E]rror React State](https://dataclient.io/docs/api/useDLE.md): High performance async data rendering without overfetching. With fetch meta data.
- [useError() - Accessing error metadata](https://dataclient.io/docs/api/useError.md)
- [useLoading() - Turn any promise into React State](https://dataclient.io/docs/api/useLoading.md): Track loading and error state of any async function.
- [useDebounce() - Declarative value delays for React](https://dataclient.io/docs/api/useDebounce.md): Delays updating the parameters by debouncing. Avoid excessive network requests due to quick parameter changes like typeaheads.
- [useCancelling() - Declarative fetch aborting for React](https://dataclient.io/docs/api/useCancelling.md): Builds an Endpoint that cancels fetch everytime parameters change. Aborts inflight request on param change.
## Core › Components
- [DataProvider - Normalized async data management in React](https://dataclient.io/docs/api/DataProvider.md): High performance, globally consistent data management in React
- [](https://dataclient.io/docs/api/ExternalDataProvider.md)
- [AsyncBoundary - Centralize loading and error handling](https://dataclient.io/docs/api/AsyncBoundary.md): Handles loading and error conditions of Suspense.
- [](https://dataclient.io/docs/api/ErrorBoundary.md)
## Core › Managers
- [Manager - Powerful middlewares with global store knowledge](https://dataclient.io/docs/api/Manager.md)
- [Actions communicate UI events to store updates](https://dataclient.io/docs/api/Actions.md)
- [getDefaultManagers() - Configuring managers for DataProvider](https://dataclient.io/docs/api/getDefaultManagers.md)
- [NetworkManager - Orchestrating efficient race-condition free fetching](https://dataclient.io/docs/api/NetworkManager.md)
- [SubscriptionManager](https://dataclient.io/docs/api/SubscriptionManager.md)
- [PollingSubscription](https://dataclient.io/docs/api/PollingSubscription.md)
- [DevToolsManager](https://dataclient.io/docs/api/DevToolsManager.md)
- [LogoutManager - Handling 401s and other deauthorization triggers](https://dataclient.io/docs/api/LogoutManager.md)
## Core › Testing
- [Fixtures and Interceptors: declarative data mocking for tests and stories](https://dataclient.io/docs/api/Fixtures.md): Fixtures and Interceptors allow universal data mocking without the need for monkeypatching fetch behaviors.
- [MockResolver - Data Mocking for React](https://dataclient.io/docs/api/MockResolver.md)
- [renderDataHook()](https://dataclient.io/docs/api/renderDataHook.md)
- [mockInitialState()](https://dataclient.io/docs/api/mockInitialState.md)
- [makeRenderDataHook()](https://dataclient.io/docs/api/makeRenderDataHook.md)
## REST
- [Using REST APIs with Reactive Data Client](https://dataclient.io/rest.md): Writing TypeScript REST APIs quickly using path templates and Schemas.
## REST › Networking Guides
- [Pagination of REST data with Reactive Data Client](https://dataclient.io/rest/guides/pagination.md)
- [Rest Authentication](https://dataclient.io/rest/guides/auth.md)
- [100x faster React with Optimistic Updates](https://dataclient.io/rest/guides/optimistic-updates.md)
- [Transforming data on fetch](https://dataclient.io/rest/guides/network-transform.md)
- [Mocking unfinished endpoints](https://dataclient.io/rest/guides/mocking-unfinished.md)
- [Aborting Fetch](https://dataclient.io/rest/guides/abort.md)
- [Django Auth and CSRF handling | Reactive Data Client](https://dataclient.io/rest/guides/django.md)
## REST › Data Guides
- [Sorting client-side REST data efficiently | Data Client](https://dataclient.io/rest/guides/sorting-client-side.md)
- [Simplified relational data rendering in React](https://dataclient.io/rest/guides/relational-data.md)
- [Mutation Side-Effects](https://dataclient.io/rest/guides/side-effects.md)
- [Computed Properties](https://dataclient.io/rest/guides/computed-properties.md)
- [Partial Entities](https://dataclient.io/rest/guides/partial-entities.md)
## REST › Endpoint API
- [RestEndpoint - Strongly typed path-based HTTP API definitions](https://dataclient.io/rest/api/RestEndpoint.md): Strongly typed path-based extensible HTTP API definitions.
- [Endpoint - Strongly typed API definitions](https://dataclient.io/rest/api/Endpoint.md)
- [Define TypeScript REST API Resources at Scale](https://dataclient.io/rest/api/resource.md): Resources are a collection of RestEndpoints that operate on a common data by sharing a schema
- [hookifyResource() - Collection of CRUD hook Endpoints](https://dataclient.io/rest/api/hookifyResource.md)
## REST › Schema API
- [Thinking in Schemas](https://dataclient.io/rest/api/schema.md): Declarative TypeScript data definitions. Mutable dynamic data applications without state management code.
- [Entity - Declarative unique objects for React](https://dataclient.io/rest/api/Entity.md)
- [EntityMixin - Declarative unique objects for pre-existing classes](https://dataclient.io/rest/api/EntityMixin.md)
- [schema.Object - Declarative Object data for React](https://dataclient.io/rest/api/Object.md)
- [schema.Array - Declarative list data for React](https://dataclient.io/rest/api/Array.md)
- [Values Schema - Declarative map data for React](https://dataclient.io/rest/api/Values.md)
- [Collection Schema - Mutable Lists and Maps](https://dataclient.io/rest/api/Collection.md)
- [Union Schema - Declarative polymorphic data for React](https://dataclient.io/rest/api/Union.md)
- [Scalar Schema - Lens-Dependent Entity Fields](https://dataclient.io/rest/api/Scalar.md)
- [Query Schema - Programmatic memoized store access](https://dataclient.io/rest/api/Query.md)
- [All Schema - Access every entity in the Reactive Data Client store](https://dataclient.io/rest/api/All.md)
- [Invalidate Schema - Invalidating Entities](https://dataclient.io/rest/api/Invalidate.md)
- [Lazy Schema - Deferred Relationship Denormalization](https://dataclient.io/rest/api/Lazy.md)
- [validateRequired](https://dataclient.io/rest/api/validateRequired.md)
- [SchemaSimple - Define data processing protocols](https://dataclient.io/rest/api/SchemaSimple.md): Build custom schemas for normalization, denormalization, and query keys.
## REST › Migration Guides
- [Migrating from Axios to Reactive Data Client](https://dataclient.io/rest/guides/axios-migration.md)
## GraphQL
- [GraphQL Usage with Reactive Data Client](https://dataclient.io/graphql.md)
- [GraphQL Authentication patterns for Reactive Data Client](https://dataclient.io/graphql/auth.md)
## GraphQL › GraphQL API
- [GQLEndpoint](https://dataclient.io/graphql/api/GQLEndpoint.md)
- [GQLEntity](https://dataclient.io/graphql/api/GQLEntity.md)