【问题标题】:Re-execute relayjs query重新执行relayjs查询
【发布时间】:2016-06-25 10:44:51
【问题描述】:

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

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

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

中继文档似乎没有描述如何做到这一点。我首先想到的是创建一个不做任何事情的虚拟突变,以便重新获取数据以更新视图。然而,这不仅看起来像是一个糟糕的实现,而且它可能无法正常工作,因为突变只会返回更改,而不是整个结果集。

如果可能,我宁愿不使用 3rd 方库。

这是我的中继容器:

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')},
      }
    `,
  },
});

【问题讨论】:

    标签: reactjs graphql relayjs


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,我已经尝试过了。我会再试一次并回复你。谢谢。
    • 顺便说一下,订阅是解决这个问题的“真正”解决方案,只是还没有在 Relay 中构建。
    • 您可以查看此报告,了解如何使用订阅的示例:github.com/eyston/relay-chat-subscriptions。它是一个专门的聊天应用,所以看起来很热门
    猜你喜欢
    • 2018-02-04
    • 2016-10-19
    • 2016-03-28
    • 2016-04-07
    • 2017-04-25
    • 2021-12-04
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    相关资源
    最近更新 更多