Как объединить несколько запросов Apollo в состоянии с React? - PullRequest
0 голосов
/ 07 января 2019

Я новичок в React и Apollo, примененных к MongoDB, и у меня следующая проблема:

У меня есть таблица, где у меня есть (ID - ID_A - ID_B), я сделал запрос для этого и возвращает мне массив. После этого мне нужно запросить в другой таблице для каждого компонента в массиве совпадение с ID_A.

Итак, я сделал:

{this.props.firstGet.map((data, index) => {
const id = data.ID_A;
return (
<Query key={this.props.firstGet.id} query={QUERY} variables={{ id }}>
   {({ loading, error, data }) => {
   if (loading) return 'Loading...';
   if (error) return `Error ${error.message}`;
   this.test = this.test.concat({...data.getStartup, ...this.state.applicants[index]});
   return(this.test.length === this.props.getApplicants.length ? 
   <LastTable startups={this.test}></LastTable>
   : '')
   }
   }
</Query>
);

Какой метод лучше всего подходит для моей проблемы? Мне нужен первый массив с составным для каждого объекта с ответом второй таблицы. Есть ли способ сделать это непосредственно в основное состояние, не используя, например, LastTable?


Как я решаю это: 1) Добавление в схему MainTable MongoDB:

ID_A: {
    type: mongoose.Schema.ObjectId,
    ref: 'Table1'
}

2) В графе QQ Shcema: ID_A: Table1Object

3) Добавление .populate ('ID_A') в распознаватель

Сейчас попробую вставить новый, возможно у меня проблемы, но если с идентификатором в этом поле MainTable ID_A соединение работает отлично

1 Ответ

0 голосов
/ 08 января 2019

Это может быть обработано на стороне сервера graphql. Вам просто нужно запросить разрешение этих зависимых полей и вернуть их со стороны сервера.

Например,

1.Создать схему с полями и подполями * 1007 например *

 type Person {
 id: ID!
 cars: [Car]
}

type Car {
  id:ID!
  ownerId: Int!
  model: String
}

2. Вам нужно написать вложенные преобразователи на стороне сервера

Персональный распознаватель:

import Query from './query';
import Mutation from './mutation';

export default {
  Query,       //<----- person query resolver 
  Mutation,    //<----- person mutation resolver if any
  Person: { .  //<----- Nested fields resolver on Person
   cars: (parent, args, { dataSources }) => {
      const { id: ownerId } = parent;
      // return from db cars owned by person
      return dataSources.carAPI.getCarsByOwnerId(ownerId);
    },
  },
};

Я использую источник данных здесь, но вы можете использовать прямое разрешение из базы данных.

3. Запрос на стороне клиента

 export const GET_PERSON_WITH_CARS = gql`
  query getPersonWithCars($id: ID!) {
   person(id: $id) {
      id
      cars {
        id,
        ownerId,
        model,
     }
  }
`

Надеюсь, это поможет

...