Вначале я попробовал реакцию-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, который хотел только имя ... Это не помогло.
Я также посмотрелна другие связанные вопросы, основанные на превышении максимального стека вызовов, но я не уверен, что сообщение - это не просто красная сельдь, поскольку независимо от того, был ли вложен объект схемы или нет, он не должен быть ни здесь, ни там в пользовательском интерфейсе, если он его игнорирует.Я включил консольные журналы, чтобы убедиться, что у меня не получился какой-то бесконечный цикл (не зная, что он хорошо реагирует), и на самом деле это не так, и, очевидно, поскольку этот пример кода будет точкой посадки большинства людей, он должен работать для большинства.
Может ли кто-нибудь указать мне правильное направление здесь?