我有一个数组/表,可以说10000项。
现在我尝试在我的react relay客户端中显示索引4000到4010的项目。
但目前connectionArgs
仅允许使用cursors
进行导航,但我不想在我到达第4000项之前进行翻页。
如何使用GraphQL查询导航到给定的偏移量?
谢谢
答案 0 :(得分:1)
您可以使用this.props.relay.setVariable
通过声明Relay.Container片段和服务器GraphQL架构中的变量将变量值传递给服务器端。
示例代码如下。请特别注意标有注意:
的部分在您的客户端:
// Your React component
class ItemList extends React.Component {
constructor(props) {
super(props);
this.state = { startItemIndex: 0 };
}
nextPage() {
const _nextPageItemIndex = this.state.startItemIndex + itemCountOnPage;
// NOTE: Call this.props.relay.setVariables to force re-fetch
this.props.relay.setVariables({ startItemIndex: _nextPageItemIndex });
this.setState({ startItemIndex: _nextPageItemIndex });
}
...
}
// Your Relay data declaration
Relay.createContainer(ItemList, {
initialVariables: {
itemStartIndex: 0,
},
fragments: {
itemList: () => Relay.QL`
// NOTE: Declare your variable in the GraphQL fragment
fragment on ItemList(itemStartIndex: $itemStartIndex) {
id,
listName,
items,
...
}
`
}
}
在服务器端,在GraphQL架构中:
var ItemListType = new GraphQLObjectType({
name: 'ItemList',
fields: () => ({
listName: {type: GraphQLString},
items: ...
}),
});
// App is what your Route will query, and it holds your itemList
// Relay.QL`
// query GameQuery {
// itemList
// }
// `
var AppType = new GraphQLObjectType({
name: 'App',
fields: () => ({
itemList: {
// NOTE: This is where your variables will appear
args: {
itemStartIndex: {type: GraphQLInt},
},
type: new GraphQLList(ItemListType),
...
resolve: (appObj, args) => {
// NOTE: Use args.itemStartIndex to pull out your list
}
},
}),
})