我正在React应用程序中学习GraphQL的Relay库。
我做了所有与官方文档一样的事情。
我的/project/resources/js/schema.graphql
具有:
type usersPagination {
"""List of items on the current page"""
data: [Users]
"""Number of total items selected by the query"""
total: Int!
"""Number of items returned per page"""
per_page: Int!
"""Current page of the cursor"""
current_page: Int!
"""Number of the first item returned"""
from: Int
"""Number of the last item returned"""
to: Int
}
在我的React /project/resources/js/components/main/Table.js
中,我尝试进行查询:
<QueryRenderer
environment={environment}
query={graphql`
query usersPaginationQuery {
data {
Users
}
}
`}
render={({error, props}) => {
if(error) {
return <div>Error!</div>
}
if(!props) {
return <div>Loading...</div>
}
return <div>User: {props.users.data.id}</div>;
}}
/>
然后我运行npm run relay
对其进行编译,但会引发错误:
解析错误:错误:RelayFindGraphQLTags:graphql中的操作名称 标签必须以模块名称为前缀,并以“ Mutation”结尾, “查询”或“订阅”。在模块中获得了
usersPaginationQuery
Table
。在“ components / main / Table.js”中
对我来说这是胡说八道,因为我的查询名称与module name + "Query"
关键字完全相同。
感谢您的帮助。
答案 0 :(得分:1)
答案 1 :(得分:0)
在GraphQL中,操作名称是紧随query
或mutation
关键字之后且在第一个大括号之前的名称。它是调用者提供的任意名称,与架构中的任何内容都不相关。在第一个大括号之后的第一个字段选择是Query
或Mutation
类型的字段。
query OperationName {
topLevelQuery {
fieldOnItsType
... OtherFields
}
}
您似乎已尝试在“操作名称”插槽中使用顶级查询字段的名称。由于已将其识别为操作名称,因此不会将其作为顶级查询执行,因此您将绕过Relay的规则命名规则:
graphql标记中的操作名称必须以模块名称为前缀,并以“ Mutation”,“ Query”或“ Subscription”结尾
当前模块名称为Table
(因为您在Table.js
文件中)。因此您的查询应该看起来像
query TableQuery {
usersPaginationQuery {
data {
... SomeFieldsOnUsers
}
}
}
您需要列出Users
上要选择的每个字段(假设是对象类型)。我在这里使用了GraphQL fragment语法,因为您没有显示该类型中的内容,但是不允许您在此处直接使用对象类型名称。