将边插入继电器连接的正确方法是什么?

时间:2019-06-08 10:09:45

标签: connection graphql graphql-js relayjs relay

我在中继paginationContainer组件中订阅了新记录。当它从后端检索新记录时,我将其以这种方式(在updater的{​​{1}}选项中)插入连接中:

requestSubscription

当我在const newEdge = ConnectionHandler.createEdge( store, connection, newPostNode, 'posts' ) ConnectionHandler.insertEdgeBefore(connection, newEdge) 中看到新插入的边缘时,它可以正常工作。 但是,正如我期望的那样,这个新插入的边的console.log(props.posts.edges)参数是cursor,而它的undefined参数本身就是记录。

我认为这是不正确的,因为连接中的每个边缘都必须具有node

将新边插入中继连接以使其包含cursor的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

每个边缘都必须有一个游标,并且通常应由服务器提供。这意味着订阅或变异返回的节点可能是边缘的一部分,也应提供游标。

有两种主要方法。如果只能以一种方式对连接进行排序(从而保证同一节点始终具有相同的游标),则只需返回整个边类型:

 this.autocomplete = new google.maps.places.Autocomplete(this.autocompleteElement.nativeElement,{
      componentRestrictions:{'country':'IN'},
      types:[]
    });
    // Bind the map's bounds (viewport) property to the autocomplete object,
    // so that the autocomplete requests use the current map bounds for the
    // bounds option in the request.
    //this.autocomplete.bindTo('bounds', map);

    // Set the data fields to return when the user selects a place.
    this.autocomplete.setFields(
      ['address_components', 'geometry.location', 'icon']);


    this.autocomplete.addListener('place_changed',()=>{
      let place=this.autocomplete.getPlace();
      console.log(place);
      if (!place.geometry) {
        // User entered the name of a Place that was not suggested and
        // pressed the Enter key, or the Place Details request failed.
        console.log("No details available for input: '" + place.name + "'");
        return;
      }



    })

如果可以用多种方式对连接进行排序(例如,按标题,出版日期,作者),则光标会因排序选项而异,这意味着您无法返回边本身,而可以返回必要的边在客户端更新程序中构建边缘的信息:

type PostEdge {
    node: Post!
    cursor: String!
}

type MyMutationPayload {
    edge: PostEdge!    
}

type Mutation {
    newPost(input: NewPostInput!): MyMutationPayload!
}