marmelab/react-admin · error · Error

Unknown dataProvider function: ${type}

Error message

Unknown dataProvider function: ${type}

What it means

useDataProvider returns a Proxy over the dataProvider; any method accessed on it must exist as a function on the underlying provider. Accessing a property that isn't a function (or a mistyped method name) throws this error instead of 'is not a function'.

Source

Thrown at packages/ra-core/src/dataProvider/useDataProvider.ts:102

        defaultDataProvider) as unknown as TDataProvider;
    const queryClient = useQueryClient();

    const logoutIfAccessDenied = useLogoutIfAccessDenied();

    const dataProviderProxy = useMemo(() => {
        return new Proxy(dataProvider, {
            get: (_, name) => {
                if (typeof name === 'symbol' || name === 'then') {
                    return;
                }
                if (name === 'supportAbortSignal') {
                    return dataProvider.supportAbortSignal;
                }
                return (...args) => {
                    const type = name.toString();

                    if (typeof dataProvider[type] !== 'function') {
                        throw new Error(
                            `Unknown dataProvider function: ${type}`
                        );
                    }

                    try {
                        return dataProvider[type]
                            .apply(dataProvider, args)
                            .then(response => {
                                if (
                                    process.env.NODE_ENV === 'development' &&
                                    reactAdminFetchActions.includes(type)
                                ) {
                                    validateResponseFormat(response, type);
                                }
                                if (response?.meta?.prefetched) {
                                    populateQueryCache({
                                        data: response?.meta.prefetched,
                                        queryClient,

View on GitHub (pinned to 051f511bb0)

Solutions

  1. Fix the method name typo to match the DataProvider interface (getOne, getList, create, update, updateMany, delete, deleteMany)
  2. Implement all required DataProvider methods in your custom provider
  3. Type the provider as DataProvider so TypeScript flags missing/misspelled methods

Example fix

// before
const dataProvider = { getList: ..., getOne: ... }; // missing create etc.
// after
const dataProvider: DataProvider = {
  getList: ..., getOne: ..., create: ..., update: ...,
  updateMany: ..., delete: ..., deleteMany: ...,
};
Defensive patterns

Strategy: type-guard

Validate before calling

const REQUIRED = ['getList','getOne','getMany','getManyReference','create','update','updateMany','delete','deleteMany'];
const missing = REQUIRED.filter(m => typeof dataProvider[m] !== 'function');
if (missing.length) throw new Error(`dataProvider missing: ${missing.join(', ')}`);

Type guard

const isDataProvider = (dp: unknown): dp is DataProvider =>
  typeof dp === 'object' && dp !== null &&
  ['getList','getOne','create','update','delete'].every(m => typeof (dp as any)[m] === 'function');

Try / catch

try {
  await dataProvider.getOne('posts', { id });
} catch (e) {
  if (/Unknown dataProvider function/.test(e.message)) {
    console.error('Method name mismatch or missing method in dataProvider');
  }
  throw e;
}

Prevention

When it happens

Trigger: Calling dataProvider.geteOne (typo), a method absent from the provider, or a non-function property override in a custom/partial dataProvider passed to <Admin dataProvider={...}>.

Common situations: Hand-rolled data providers missing required methods; mock providers built with object spread losing methods; typos in method names after v3/v4 API changes.

Related errors


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