marmelab/react-admin · critical

Missing dataProvider prop. React-admin requires a valid data

Error message

Missing dataProvider prop.
React-admin requires a valid dataProvider function to work.

What it means

React-admin's CoreAdminContext requires a `dataProvider` prop — the adapter that talks to your API (fetch, REST, GraphQL, local). Without it no data query can run, so the library throws immediately when the admin renders. This is a hard requirement of the framework.

Source

Thrown at packages/ra-core/src/core/CoreAdminContext.tsx:206

     * );
     */
    routerProvider?: RouterProvider;
}

export const CoreAdminContext = (props: CoreAdminContextProps) => {
    const {
        authProvider,
        basename,
        dataProvider = defaultDataProvider,
        i18nProvider,
        store = defaultStore,
        children,
        queryClient,
        routerProvider = reactRouterProvider,
    } = props;

    if (!dataProvider) {
        throw new Error(`Missing dataProvider prop.
React-admin requires a valid dataProvider function to work.`);
    }

    const finalQueryClient = useMemo(
        () => queryClient || new QueryClient(),
        [queryClient]
    );

    const finalAuthProvider = useMemo(
        () =>
            authProvider instanceof Function
                ? convertLegacyAuthProvider(authProvider)
                : authProvider,
        [authProvider]
    );

    const finalDataProvider = useMemo(
        () =>

View on GitHub (pinned to 051f511bb0)

Solutions

  1. Pass a dataProvider: <Admin dataProvider={simpleRestProvider('/api')}>
  2. If the provider is created asynchronously, render the admin only after it resolves (or use a placeholder until ready)
  3. Verify the import of the data provider package and that the factory call is not returning undefined

Example fix

// before
<Admin>
  <Resource name="posts" />
</Admin>
// after
import simpleRestProvider from 'ra-data-simple-rest';
<Admin dataProvider={simpleRestProvider('http://localhost:3000')}>
  <Resource name="posts" />
</Admin>
Defensive patterns

Strategy: validation

Validate before calling

if (typeof dataProvider !== 'function' && typeof dataProvider?.getList !== 'function') {
  throw new Error('dataProvider is missing or invalid');
}
return <Admin dataProvider={dataProvider}>...</Admin>;

Type guard

const isDataProvider = (dp) => dp != null && typeof dp.getList === 'function' && typeof dp.getOne === 'function';

Prevention

When it happens

Trigger: Rendering <CoreAdminContext> or <Admin> without a dataProvider prop; passing undefined due to a failed import or async dataProvider not yet resolved (e.g. dataProvider={fetchedProvider} while still loading); conditional composition like dataProvider={process.env.X && provider} evaluating to false/undefined.

Common situations: Beginner setups forgetting the dataProvider; lazy-loading a dataProvider without gating the admin render; custom admin compositions (CoreAdminContext/CoreAdminRoutes used directly) missing the prop; environment variables not set so the factory returns undefined.

Related errors


AI-assisted analysis of marmelab/react-admin@051f511bb0 (2026-08-30). Data as JSON: /api/errors/80005ac2a0a35120. Report an issue: GitHub.