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
- Pass a dataProvider: <Admin dataProvider={simpleRestProvider('/api')}>
- If the provider is created asynchronously, render the admin only after it resolves (or use a placeholder until ready)
- 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
- Always pass a dataProvider when creating <Admin>/<CoreAdminContext>
- Gate async provider creation: render admin only after the provider resolves
- Verify the data-provider package import and factory call actually returns a provider object
- Check env vars used to build the provider are defined
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
- useReferenceFieldController: missing reference prop. You mus
- useShowController requires an id prop or a route with an /:i
- useNextPrevController was called outside of a ResourceContex
- Found getManyReference result in cache without total or page
- ra.notification.data_provider_error
AI-assisted analysis of marmelab/react-admin@051f511bb0 (2026-08-30).
Data as JSON: /api/errors/80005ac2a0a35120.
Report an issue: GitHub.