簡體   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