Relay.js错误:repeat()参数必须大于或等于0且不是无穷大

时间:2016-04-29 22:15:08

标签: reactjs graphql relayjs

不确定我在这里做错了什么。我的中继查询似乎是正确组合的(即我可以验证查询是否成功返回预期的结果)但是当应用程序在浏览器中呈现时,我收到Error: repeat() argument must be greater than or equal to 0 and not be infinity的错误。

在我为分页结果添加片段(edge + node)之前,应用程序一直很好:

const ConversationContainer = Relay.createContainer(Conversation, {
  fragments: {
    conversation: () => Relay.QL`fragment on Conversation {
      id
      fingerprint
      unreadCount
      messages(first: 3) {
        pageInfo {
          hasNextPage
        }
        edges {
          node {
            body
          },
          cursor
        },
      }
    }`
  }
})

和演示文稿组件:

class Conversation extends Component {
  render() {
    const { id, fingerprint, unreadCount, messages } = this.props.conversation;
    return <div>
      <div>conversation <code>{id}</code></div>
      <div>fingerprint: <code>{fingerprint}</code>, unreadCount: {unreadCount}</div>
      <pre>{JSON.stringify(messages, null, 2)}</pre>
    </div>;
  }
}

那么错误的原因是什么?

编辑:错误位于UI中,由我的根组件renderFailure属性呈现(也作为控制台中的警告)

const root = <Relay.RootContainer
  Component={AppContainer}
  route={new AppRoute()}
  renderLoading={() => <div>Loading...</div>}
  renderFailure={(error, retry) => <div>Error: {error.message}</div>}
/>;

1 个答案:

答案 0 :(得分:3)

我能想到的两件事:

RelayNetworkLayer

这可能与您的GraphQL服务器有关,而与Relay无关。

从中继源看一下这一行: https://github.com/facebook/relay/blob/a1a4d99cb698e1eed63d28f8291ef114115d515d/src/network-layer/default/RelayDefaultNetworkLayer.js#L193

我知道这真的很奇怪但你的服务器是否会以负值列值返回错误?

getBabelRelayPlugin

https://github.com/facebook/relay/blob/00de34d32d51ba9e4d17e45280ad6d7e2734c6ed/scripts/babel-relay-plugin/src/getBabelRelayPlugin.js#L155

再次与错误有关,但这次是客户端模式验证。虽然您似乎表示您的查询运行正常,但这意味着您的架构有效。

您能告诉我们GraphQL服务器返回的内容吗?