因此,基于此评论,我已经能够将一个简单的“分页”组件/容器混合在一起:https://github.com/facebook/graphql/issues/4#issuecomment-118162627
我说“黑客”,因为那就是我所做的。
我通过在浏览器中查看/graphql
响应中的边缘游标来了解它。问题是..当我没有“先前的查询”工作时,如何使这些项的第一个“页面”工作?
我尝试将after
作为undefined
留在我的查询中,但我只收到以下错误:
未捕获的不变违规:callsFromGraphQL():预期变量的声明值为$ curs。
看来,如果在容器的片段中定义first
和after
,那么它们就是必需的参数。但我对after
没有任何价值,那么世界上如何才能初始化它呢?
此示例抛出上述错误:
export default Relay.createContainer(Widgets2, {
initialVariables: {
pageSize: 2
},
fragments: {
viewer: () => Relay.QL`
fragment on User {
widgets(
first: $pageSize,
after: $curs
) {
edges {
cursor,
node {
id,
name,
},
},
},
}
`,
},
});
//And in the React component:
nextPage () {
let lastIndex = this.props.viewer.widgets.edges.length - 1
this.props.relay.setVariables({
curs: this.props.viewer.widgets.edges[lastIndex].cursor
})
}
答案 0 :(得分:5)
好问题。在Relay中,必须为所有变量提供默认值。如果该值未知,则可以使用null
:在这种情况下,这意味着在curs: null
中指定initialVariables
。我们需要明确的null
来帮助确保开发者不会忘记指定价值。