Relay.js 中的查看者
Viewer in Relay.js
为什么需要以及如何在 Relay.js 中正确使用 viewer
?
过去一周我一直在努力理解 Relay.js。我现在对 GraphQL 很在行,我也很了解它,但是我在将 GraphQL 和 Relay.js 合并到同一个应用程序时遇到了一些问题。
第一步可能是理解 viewer
。我看过很多使用它的示例和教程,但从未对其进行解释,也不是很清楚它到底是什么以及它的用途。
中继文档提到 viewer
几次,但甚至没有一个词来解释它。
我希望我能对这个问题做更多的事情,但恐怕网上没有解释。它仅用于代码中,将其从上下文中剥离是没有任何意义的。回答这个问题需要一些关于Realy的知识。js/GraphQL无论如何。
根据我检查过的无数示例,我的最佳猜测是它与用户有某种关系?如果用户是匿名的还是已登录?要根据登录状态或用户级别授予对数据的不同访问权限?
viewer
不是中继特定的东西。这只是一个字段名称。你是对的。该字段通常代表应用程序的用户或查看者的 GraphQLObject 类型。
根查询类型是我们在架构对象中定义并作为 query
传递的 GraphQL 对象。例如,在 todo example application, it's Root
.
export const schema = new GraphQLSchema({
query: Root,
mutation: Mutation,
});
在relay-treasurehunt example application, the root query type is queryType
.
export const schema = new GraphQLSchema({
query: queryType,
mutation: mutationType,
});
根查询类型是访问其他数据的主要访问点。这些其他数据被列为根查询对象的字段。与任何 GraphQL 对象一样,根查询类型可以有一个或多个字段。在 todo 示例应用程序中,它有一个名为 viewer
:
的字段
const Root = new GraphQLObjectType({
name: 'Root',
fields: {
viewer: {
type: GraphQLUser,
resolve: () => getViewer(),
},
node: nodeField,
},
});
在 relay-treasurehunt 示例应用程序中,根查询类型有一个名为 game
.
的字段
const queryType = new GraphQLObjectType({
name: 'Query',
fields: () => ({
node: nodeField,
game: {
type: gameType,
resolve: () => getGame(),
},
}),
});
现在如果有一个viewer
字段来表示应用程序用户或网站浏览者,用户是匿名用户还是登录用户完全取决于应用程序。如果用户需要登录,你可以为登录实现一个突变。您还可以限制对数据的访问。 Jonas Helfer posted an 如何在服务器端完成用户访问检查。
为什么需要以及如何在 Relay.js 中正确使用 viewer
?
过去一周我一直在努力理解 Relay.js。我现在对 GraphQL 很在行,我也很了解它,但是我在将 GraphQL 和 Relay.js 合并到同一个应用程序时遇到了一些问题。
第一步可能是理解 viewer
。我看过很多使用它的示例和教程,但从未对其进行解释,也不是很清楚它到底是什么以及它的用途。
中继文档提到 viewer
几次,但甚至没有一个词来解释它。
我希望我能对这个问题做更多的事情,但恐怕网上没有解释。它仅用于代码中,将其从上下文中剥离是没有任何意义的。回答这个问题需要一些关于Realy的知识。js/GraphQL无论如何。
根据我检查过的无数示例,我的最佳猜测是它与用户有某种关系?如果用户是匿名的还是已登录?要根据登录状态或用户级别授予对数据的不同访问权限?
viewer
不是中继特定的东西。这只是一个字段名称。你是对的。该字段通常代表应用程序的用户或查看者的 GraphQLObject 类型。
根查询类型是我们在架构对象中定义并作为 query
传递的 GraphQL 对象。例如,在 todo example application, it's Root
.
export const schema = new GraphQLSchema({
query: Root,
mutation: Mutation,
});
在relay-treasurehunt example application, the root query type is queryType
.
export const schema = new GraphQLSchema({
query: queryType,
mutation: mutationType,
});
根查询类型是访问其他数据的主要访问点。这些其他数据被列为根查询对象的字段。与任何 GraphQL 对象一样,根查询类型可以有一个或多个字段。在 todo 示例应用程序中,它有一个名为 viewer
:
const Root = new GraphQLObjectType({
name: 'Root',
fields: {
viewer: {
type: GraphQLUser,
resolve: () => getViewer(),
},
node: nodeField,
},
});
在 relay-treasurehunt 示例应用程序中,根查询类型有一个名为 game
.
const queryType = new GraphQLObjectType({
name: 'Query',
fields: () => ({
node: nodeField,
game: {
type: gameType,
resolve: () => getGame(),
},
}),
});
现在如果有一个viewer
字段来表示应用程序用户或网站浏览者,用户是匿名用户还是登录用户完全取决于应用程序。如果用户需要登录,你可以为登录实现一个突变。您还可以限制对数据的访问。 Jonas Helfer posted an