簡體   English   中英

中繼現代片段錯誤(期望對象包含數據…)

[英]Relay Modern fragment error (expect object to contain data…)

我正在使用Relay和django-graphene版本2。Country.js正在渲染國家列表。

使用片段我得到這個錯誤:警告:RelayModernSelector:預計對象包含片段數據Country_country ,得到{"node":{"__fragments":{"Country_country":{}},"__id":"Q291bnRyeVR5cGU6MQ=="}} 確保父操作/片段包括片段...Country_country @relay(mask: false)而不帶@relay(mask: false)

QueryRenderer返回正確的國家列表,不帶Country_country,只需輸入變量名即可。

<QueryRenderer
      environment={environment}
      query={graphql`query CartContainerQuery {
        viewer {
          id
          countries(first: 3) {
            edges {
              node {
                ...Country_country
              }
            }
            pageInfo {
              startCursor
              endCursor
            }
          }

      }
      }`}
      variables={{}}
      render={({error, props}) => {
        if (error) {
          console.log(error)
          return <div>Error!</div>;
        }
        if (!props) {
          return <div>Loading...</div>;
        }
        return (
          <div>
          {console.log(props)}
          <Country country={props.viewer.countries.edges} />
          </div>
        );
      }}
    />

我在Contry Container上的片段:

export default createFragmentContainer(
   Country,
   graphql`
   fragment Country_country on CountryType @relay(plural: true) {
       id
       name
     }
   `
 )

石墨烯架構:

class CountryType(DjangoObjectType, model=Country):
  class Meta:
    interfaces= (relay.Node,)
    filter_fields = ['name', 'id']

class Viewer(graphene.ObjectType):
  class Meta:
    interfaces = [relay.Node, ]

  countries = DjangoFilterConnectionField(CountryType)
  country = graphene.List(CountryType)

  def resolve_country(self, info, **kwargs):
    return Country.objects.all()

  def resolve_countries(self, info, **kwargs):
    return Country.objects.all()

class Query(graphene.ObjectType):
  viewer = graphene.Field(Viewer)
  node = relay.Node.Field()

  def resolve_viewer(self, info):
    return Viewer()

如果我在QueryRenderer中嘗試此查詢,它也可以正常工作:

query={graphql`query CartContainerQuery {
            viewer {
              id
              country {
                  ...Country_country
                }
            }
          }`}

我是否錯誤地使用DjangoFilterConnectionField?

據我所知,現在進行測試,您的石墨烯方面還可以,而錯誤來自ReactJS方面,這意味着您正在真正使用DjangoFilterConnectionField。

我對此進行了大量研究,但是由於我沒有完全看到您的React代碼,因此我對此有所懷疑。 無論如何,正如我在此示例( QueryFragment )中看到的那樣,您正在使用此錯誤:

<Country country={props.viewer.countries.edges} />

您應該這樣使用它:

<Country country={props.viewer.countries} />

據我了解,您需要將查詢的對象傳遞給孩子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM