Максимальный размер стека вызовов превышен вact-admin с ra_data_graphql_simple при использовании схемы с вложенным объектом - PullRequest
0 голосов
/ 28 февраля 2019

Вначале я попробовал реакцию-admin как решение администратора для простого ввода данных для приложения, но мне не хватает документов, и я искал решение этой проблемы в Интернете после многих часов отладки.

Моя проблема:

Когда вложенные объекты присутствуют в моей схеме следующим образом ..

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

реакция-администратор завершится с ошибкой: превышен максимальный размер стека вызовов .. онв этом случае после самоанализа даже не звонит моему серверу graphql, я вижу это в моих инструментах разработчика.Мой бэкэнд - Apollo Server с Sequelize в качестве моего ORM, и мои зависимости там следующие:

"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 прекрасно работает с вложенными объектами и возвращает ожидаемые данные. Схемасмоделирован точно так, как предложил простой провайдер данных от marmelabs

Мой реагирующий администратор не является чем-то особенным ... он настроен точно так же, как примеры, перечисленные в файле readme ... мой код 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"
  }

Единственный способ, которым он даже отправит вызов на сервер graphql для allCountries, - это если нет вложенностив объекте Country, когда выполняется запрос самоанализа.Я проверял с этим в и из нескольких раз, чтобы быть уверенным.Очевидно, мне это нужно. Я также подумал, что, может быть, проблема с ListGuesser, поэтому я взял это и вставил простой компонент CountryList, который хотел только имя ... Это не помогло.

Я также посмотрелна другие связанные вопросы, основанные на превышении максимального стека вызовов, но я не уверен, что сообщение - это не просто красная сельдь, поскольку независимо от того, был ли вложен объект схемы или нет, он не должен быть ни здесь, ни там в пользовательском интерфейсе, если он его игнорирует.Я включил консольные журналы, чтобы убедиться, что у меня не получился какой-то бесконечный цикл (не зная, что он хорошо реагирует), и на самом деле это не так, и, очевидно, поскольку этот пример кода будет точкой посадки большинства людей, он должен работать для большинства.

Может ли кто-нибудь указать мне правильное направление здесь?

1 Ответ

0 голосов
/ 28 февраля 2019

Хорошо, я не знаю, что случилось, но кто-то разместил здесь ответ, который я увидел на экране телефона чуть-чуть ... достаточно, чтобы знать, что они спросили, есть ли у моей провинции связь со страной, и это произошло... Ответ был удален или ушел к тому времени, когда я вернулся к своему ноутбуку, но это была действительно проблема ... Кто бы ни ответил, тот избавил меня еще от головной боли, прежде чем я продолжил свой путь к этому.

Так что для любого, кто приземляется здесь с подобной проблемой, будьте очень осторожны, когда вы делаете свои ассоциации в секвелизе и начинаете с малого. Я откусил больше, чем у меня хватило опыта, чтобы пережевывать, пытаясь заставить все это работать сразу, подпрыгиваяназад и вперед между response-admin и Apollo Server, и это меня напортачило и потеряло время ... Самоанализ указал на проблему, но я не являлся разработчиком внешнего интерфейса, и я не знал, где ее искать.GraphiQL не указал на это, потому что я не вызывал запросы так, чтобы это показывало мне проблему ... Я буду рад внести свой вклад, когда все это будет отсортировано ... Приветствия

...