当具有嵌套对象的架构时,ra_data_graphql_simple 的 react-admin 中超出了最大调用堆栈大小

Maximum call stack size exceeded in react-admin with ra_data_graphql_simple when schema with nested object

我首先尝试将 react-admin 作为应用程序的一些简单数据输入的管理解决方案,但我发现缺少文档,经过数小时的调试后,我已经在线搜索了解决方案。

我的问题:

当嵌套对象出现在我的架构中时,如下所示..

type Country {
country_id: ID!
name: String
abbr2: String
abbr3: String
provincesOrStates: [ProvinceState]}

react-admin 将失败并显示错误:超出最大调用堆栈大小。在这种情况下,自省后它甚至不会调用我的 graphql 服务器,我可以在我的开发人员工具中看到它。我的后端是使用 Sequelize 作为我的 ORM 的 Apollo Server,我的依赖项如下:

"dependencies": {
"apollo-server": "^2.4.2",
"dataloader-sequelize": "^1.7.9",
"dotenv": "^6.2.0",
"graphql": "^14.1.1",
"graphql-import": "^0.7.1",
"graphql-list-fields": "^2.0.2",
"graphql-tools": "^4.0.4",
"lodash": "^4.17.11",
"merge-graphql-schemas": "^1.5.8",
"pg": "^7.8.0",
"pg-hstore": "^2.3.2",
"save": "^2.3.3",
"sequelize": "^4.42.0"}

我应该注意到 GraphiQL 可以很好地处理嵌套对象和 returns 预期数据。模式完全按照 marmelabs 的简单数据提供者建议的方式建模

我的 react-admin 没什么特别的...它的设置与他们在自述文件中列出的示例完全相同...我的 App.js 代码如下

import React, { Component } from 'react';
import { Admin, Resource, ListGuesser } from 'react-admin';
import buildGraphQLProvider from 'ra-data-graphql-simple';


class App extends Component {
    constructor() {
        super();
        this.state = { dataProvider: null };
    }
    componentDidMount() {

        buildGraphQLProvider({ clientOptions: { uri: 'http://localhost:3030/graphql' }})
            .then(dataProvider => this.setState({ dataProvider }));
    }

    render() {
        const { dataProvider } = this.state;

        if (!dataProvider) {
            return <div>Loading</div>;
        }

        return (
            <Admin dataProvider={dataProvider}>
                <Resource name="Country" options={{ label: 'Countries' }} list={ListGuesser}/>
            </Admin>
        );
    }
}

export default App;

我在该项目中的依赖项是:

"dependencies": {
    "graphql": "^14.1.1",
    "prop-types": "^15.7.1",
    "ra-data-graphql-simple": "^2.7.1",
    "ra-data-json-server": "^2.7.1",
    "ra-data-simple-rest": "^2.7.1",
    "react": "^16.8.1",
    "react-admin": "^2.7.1",
    "react-dom": "^16.8.1",
    "react-scripts": "2.1.5"
  }

它甚至将调用发送到 allCountries 的 graphql 服务器的唯一方法是在内省查询运行时是否在 Country 对象中没有嵌套。我多次进出测试以确保。显然我需要它。我还认为 ListGuesser 可能是个问题所以我把它拿出来并放入一个只需要名称的简单 CountryList 组件......这没有帮助。

我还查看了其他基于超出最大调用堆栈的相关问题,但我不确定该消息是否只是一条红鲱鱼,因为模式对象是否嵌套不应该在这里或那里 UI 如果忽略它。我将控制台登录以确保我没有陷入无限循环(不知道反应良好),事实上我没有,显然因为这个示例代码将是大多数人的着陆点,它必须适用于大多数人。

有人能给我指出正确的方向吗?

好吧,我不知道发生了什么,但有人在这里发布了一个答案,我在 phone 屏幕上看到了一点点..足以知道他们问我的省是否有关系到国家,它确实......当我回到我的笔记本电脑时,答案已被删除或消失,但这确实是问题所在......无论是谁回答它,它都让我在继续努力之前省去了更多的头痛

所以对于任何遇到类似问题的人来说,在续集和从小处着手时要非常小心。一旦在 react-admin 和 Apollo Server 之间来回跳动,这让我搞砸了,浪费了时间。自省指出了问题,但我不是前端开发人员,我不知道去哪里解决它。 GraphiQL 没有指出它,因为我没有以一种会向我展示问题的方式调用查询......我很乐意贡献更多,因为我把这些东西都整理好了......干杯