Graphql 中继:如何在利用NodeDefinition的同时避免重复的DB查询
我的问题是关于在分页时要求用户。以继电器启动器套件为基本示例Graphql 中继:如何在利用NodeDefinition的同时避免重复的DB查询,graphql,relayjs,graphql-js,Graphql,Relayjs,Graphql Js,我的问题是关于在分页时要求用户。以继电器启动器套件为基本示例 class User {} class Widget {} // Mock data var viewer = new User(); viewer.id = '1'; getUser: (id) => id === viewer.id ? viewer : null, getViewer: () => viewer, 如果这是一个真正的数据库,viewer将是对数据库的请求。让我们称之为fetchUser(id
class User {}
class Widget {}
// Mock data
var viewer = new User();
viewer.id = '1';
getUser: (id) => id === viewer.id ? viewer : null,
getViewer: () => viewer,
如果这是一个真正的数据库,viewer
将是对数据库的请求。让我们称之为fetchUser(id)
每次我们从'User'上的nodededefinitions
发出请求时,我们调用getUser()
,它向数据库发出请求,请求fetchUser(id)
当我们通过调用widgets(第一个:$count),例如,通过将$count
增加3,在“User”示例上通过一个长的无限滚动的widgets对一个片段进行分页时,我们会重复为每个分页向数据库发出请求fetchUser(id)
。这是通过每次对同一数据段发出请求来阻止数据分页
我知道data loader,但是有没有一种更简单的方法来缓存这个请求,而不必进行db查询
var userType = new GraphQLObjectType({
name: 'User',
description: 'A person who uses our app',
fields: () => ({
id: globalIdField('User'),
widgets: {
type: widgetConnection,
description: 'A person\'s collection of widgets',
args: connectionArgs,
resolve: (_, args) => connectionFromArray(getWidgets(), args),
},
}),
var userType = new GraphQLObjectType({
name: 'User',
description: 'A person who uses our app',
fields: () => ({
id: globalIdField('User'),
widgets: {
type: widgetConnection,
description: 'A person\'s collection of widgets',
args: connectionArgs,
resolve: (_, args) => connectionFromArray(getWidgets(), args),
},
}),