如何使用React在该状态下加入多个Apollo查询?

时间:2019-01-07 11:13:48

标签: reactjs graphql apollo

我是将React和Apollo应用于MongoDB的新手,但我遇到以下问题:

我有一个表(ID-ID_A-ID_B),对此表进行了查询并返回了一个数组。之后,我必须在另一个表中查询Array中每个组件与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)在graphQl shcema中:ID_A:Table1Object

3)在解析程序中添加.populate('ID_A')

我现在尝试插入一个新的,也许我有问题,但是如果在MainTable ID_A字段中使用ID,则连接会很好

1 个答案:

答案 0 :(得分:3)

这可以在graphql服务器端处理。您只需要请求解析那些相关字段并从服务器端返回即可。

例如-

1。使用字段和子字段创建架构    例如

 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);
    },
  },
};

我在这里使用dataSource,但是您可以直接使用数据库中的解析。

3。在客户端查询

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

我希望对您有帮助