Relay Pagination:如何初始化“after”值?

时间:2015-12-22 00:28:27

标签: pagination reactjs relayjs graphql graphql-js

因此,基于此评论,我已经能够将一个简单的“分页”组件/容器混合在一起:https://github.com/facebook/graphql/issues/4#issuecomment-118162627

我说“黑客”,因为那就是我所做的。

我通过在浏览器中查看/graphql响应中的边缘游标来了解它。问题是..当我没有“先前的查询”工作时,如何使这些项的第一个“页面”工作?

我尝试将after作为undefined留在我的查询中,但我只收到以下错误:

  

未捕获的不变违规:callsFromGraphQL():预期变量的声明值为$ curs。

看来,如果在容器的片段中定义firstafter,那么它们就是必需的参数。但我对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
    })
 }

1 个答案:

答案 0 :(得分:5)

好问题。在Relay中,必须为所有变量提供默认值。如果该值未知,则可以使用null:在这种情况下,这意味着在curs: null中指定initialVariables。我们需要明确的null来帮助确保开发者不会忘记指定价值。