【问题标题】:How to join multiple Apollo queries in the state with React?如何使用 React 加入状态中的多个 Apollo 查询?
【发布时间】:2019-06-02 01:16:47
【问题描述】:

我是 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 连接效果很好

【问题讨论】:

    标签: reactjs graphql apollo


    【解决方案1】:

    这可以在 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,
         }
      }
    `
    

    希望对你有帮助

    【讨论】:

    • 太实用了!最后一个问题,如果我要查询一组人员 ID,我必须使用 .map 一个一个地进行查询,或者有一些方法可以批量查询??
    • 你可以使用dataloader一次性批量查询
    • 我将编辑我的答案我如何解决它顺便说一句,如果你对我的解决方案有任何意见,请告诉我:)
    猜你喜欢
    • 2017-12-20
    • 2018-11-25
    • 2018-07-25
    • 2020-05-13
    • 2017-09-08
    • 2021-05-17
    • 2018-05-26
    • 2017-12-02
    • 1970-01-01
    相关资源
    最近更新 更多