重新执行relayjs查询

时间:2016-03-10 14:20:27

标签: reactjs graphql relayjs

我正在使用Reactjs和Relayjs开发我网站上的聊天功能。

我可以在我的视图中成功查询和显示相关数据(聊天消息)。但是,即使聊天伙伴发送新消息,视图仍保持静态。

我正在寻找实现此方法的方法,方法是检查数据库更改或按时间间隔执行相同的查询,然后获取更改(如果有)。

接力文档似乎没有描述如何做到这一点。我首先考虑创建一个不做任何事情的虚拟变异,以便重新获取数据,这将更新视图。但是,这不仅看起来像是一个糟糕的实现,而且它可能不会起作用,因为变异只返回更改,而不是整个结果集。

如果可能的话,我宁愿不使用第三方库。

这是我的中继容器:

export default Relay.createContainer(StartConversationModal, {
  prepareVariables() {
    return {
      limit: 1000,
    };
  },
  fragments: {
    conversation: () => Relay.QL`
      fragment on Conversation {
        id,
        title,
        type,
        conversationDataList(last: $limit) {
          edges {
            node {
              last_read_message_id,
              member {
                id,
                user {
                  firstname,
                  lastname
                }
              }
            }
          }
        },
        messageList(last: $limit) {
          edges {
            node {
              id,
              message,
              sent_on,
              member {
                id,
                role,
                user {
                  firstname,
                  lastname
                }
              }
            }
          }
        },
        task {
          title,
        },
        ${AddMessageMutation.getFragment('conversation')},
      }
    `,
  },
});

1 个答案:

答案 0 :(得分:2)

要重新获取容器的所有片段,您可以使用RelayContainer提供的命令式forceFetch API,请参阅docs

基本上在StartConversationModal内,您可以设置一个调出forceFetch来关闭this.props.relay的轮询器。请注意,这将重新删除可能不是您想要的整个连接,您必须对其进行试验。