You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-admin使用ra-data-json-server遇toJSON函数未知错误求助

React-admin ra-data-json-server 控制台报“Unknown dataProvider function: toJSON”错误但功能正常

问题

使用ra-data-json-server作为react-admin的数据提供者时,应用可正常运行并正确获取数据,但React DevTools控制台持续抛出“Unknown dataProvider function: toJSON”错误,无法消除。

代码示例

import jsonServerProvider from 'ra-data-json-server';

const dataProvider = jsonServerProvider('https://jsonplaceholder.typicode.com');

export default function App() {
    return (
        <Admin dataProvider={dataProvider}>
            <Resource
                name="posts"
                list={ListGuesser}
                show={ShowGuesser}
                edit={EditGuesser}
            />
        </Admin>
    );
}

控制台报错

Error: Unknown dataProvider function: toJSON
    at Proxy.eval (useDataProvider.ts:96:31)
    at JSON.stringify (<anonymous>)
    at Object.parseData (<anonymous>:8:116)
    at <anonymous>:10:2186
    at Array.reduce (<anonymous>)
    at <anonymous>:10:2114
    at i (<anonymous>:10:2706)
    at <anonymous>:10:2993
    at _ (<anonymous>:10:3119)
    at <anonymous>:10:3363

环境版本

  • react-admin 4.5.2
  • ra-data-json-server 4.5.2
  • react 18.2.0
  • react-dom 18.2.0

解决方案

该错误是因为React DevTools尝试对dataProvider对象执行JSON.stringify,而ra-data-json-server返回的dataProvider是Proxy对象,JSON.stringify会自动调用toJSON方法,但该方法不在react-admin预期的dataProvider API中,从而触发错误。

只需给dataProvider添加toJSON方法,让JSON.stringify能正确序列化对象即可:

方法1:通过Proxy扩展

import jsonServerProvider from 'ra-data-json-server';

const dataProvider = jsonServerProvider('https://jsonplaceholder.typicode.com');

// 增强dataProvider,添加toJSON方法避免序列化报错
const enhancedDataProvider = new Proxy(dataProvider, {
  get(target, prop) {
    if (prop === 'toJSON') {
      return () => ({ ...target });
    }
    return Reflect.get(target, prop);
  },
});

export default function App() {
    return (
        <Admin dataProvider={enhancedDataProvider}>
            <Resource
                name="posts"
                list={ListGuesser}
                show={ShowGuesser}
                edit={EditGuesser}
            />
        </Admin>
    );
}

方法2:直接添加toJSON方法

import jsonServerProvider from 'ra-data-json-server';

const dataProvider = jsonServerProvider('https://jsonplaceholder.typicode.com');
// 添加toJSON方法,返回包含所有dataProvider方法的普通对象
dataProvider.toJSON = () => ({ ...dataProvider });

export default function App() {
    return (
        <Admin dataProvider={dataProvider}>
            <Resource
                name="posts"
                list={ListGuesser}
                show={ShowGuesser}
                edit={EditGuesser}
            />
        </Admin>
    );
}

添加后,React DevTools序列化dataProvider时会调用自定义的toJSON方法,不会再触发错误。

内容的提问来源于stack exchange,提问作者Zicheng Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:45:32