2016-03-10 35 views
2

我正在使用Reactjs和Relayjs开发我网站上的聊天功能。重新执行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')}, 
     } 
    `, 
    }, 
}); 

回答

2

重新获取所有碎片的容器,你可以使用RelayContainer给出的当务之急forceFetch API,见docs

基本上里面StartConversationModal你可以建立一个拨打forceFetch关闭this.props.relay。请注意,这将重新提取可能不是您想要的整个连接,您必须试用它。

+0

嗯,我已经尝试过了。我会再试一次并回复你。谢谢。 – Chris

+0

顺便说一下,订阅是“真正的”解决方案,这些只是尚未在Relay中构建。 – NevilleS

+1

您可以查看本报告,了解如何使用订阅的示例:https://github.com/eyston/relay-chat-subscriptions。它特别是一个聊天应用程序,所以它似乎是主题 – NevilleS