react relay在碎片上使用@refetchable无效



我正在学习react relay(v13(,在使用@refetchable指定分页片段时遇到问题。这是一个非常基本的结构,如果不使用@refetchable,一切都会正常工作(即我可以查询graql服务器,获取数据,使用fragment在不分页的情况下呈现相同的查询/片段(

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

[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现在将编译。我希望中继错误消息更清楚一点,因为有太多的事情可能会出错,而且中继对事情很有主见,更好的错误消息将是一个很大的帮助。

最新更新