繁体   English   中英

反应中继在片段上无效使用@refetchable

[英]react-relay Invalid use of @refetchable on fragment

我正在学习 react-relay (v13),在使用 @refetchable 指定分页片段时遇到问题。 这是一个非常基本的结构,如果不使用@refetchable 一切正常(即我可以查询 grapql 服务器,获取数据,使用 Fragment 来呈现相同的查询/片段而无需分页)

当我在 ProjectsFragment_user 中引入 @refetchable 时,react-relay 编译器给出了错误:

[ERROR] ✖︎ Invalid use of @refetchable on fragment 'ProjectsFragment_user', only supported are fragments on:
 - the Viewer type
 - the Query type
 - the Node interface or types implementing the Node interface
 - @fetchable type

现在这很令人困惑,因为 ProjectsFragment_user 在一个看起来像这样的查询上:

// Dashboard.js
export const dashboardQuery = graphql`
query DashboardQuery ($id: ID) {
  user (id: $id){
    id 
    name
    ...ProjectsFragment_user
  }
}
`;
// then 
const  data = useLazyLoadQuery(dashboardQuery, {}, {},);

//Projects.js defines fragment

const {data, loadNext} = usePaginationFragment(graphql`
    fragment ProjectsFragment_user on User 
    @argumentDefinitions(
        first: {type: "Int", defaultValue: 10}
        after: {type: "String"}
        before: {type: "String"}
      )
    @refetchable(queryName: "ProjectsListPaginationQuery")
    {
            projects (first: $first, after: $after, before: $before)
            @connection(key: "ProjectsList_projects") {
                total
                edges {
                  node {
                   id
                   name
          
                    members {
                     total
                     edges {
                     node {
                        member_id
                        member {
                        name
                        }
                        role
                      }
                     }
                   }
                  }
              }
            }
        }
    `,
    props?.projects);

请注意,如果只是在 ProjectsFragment_user 上使用 Fragment 并删除 @refetchable,我就可以获取和呈现数据。

有没有人知道为什么这里不允许@refetchable?

并回答我自己的问题(经过几天的尝试)。 Schema 需要具体说明 Type 正在扩展 Node 接口,否则反应会按照上面的方式抱怨。

所以,我从

type Project {
   id: ID!
   name: String
}

type Project implements Node {
   id: ID!
   name: String
}

React-Relay 现在将编译。 我希望中继错误消息更清楚一些,因为有太多的事情可能 go 出错,而且中继对事情非常自以为是,更好的错误消息将是一个很大的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM