【发布时间】:2018-10-14 03:52:19
【问题描述】:
大多数示例在查询组件中使用 subscribeToMore,但在我的情况下,查询和订阅返回的数据非常不同,所以我认为我需要一个离散的订阅组件。
我将时间序列数据添加到触发onChangedWeatherIntervals 订阅的数据库中,该订阅返回有关新时间序列信息的摘要信息。如果新的时间序列信息与 React 客户端的过滤器匹配,它应该请求更新直方图 getHistogram 查询。
我的测试代码:
<Query
query={gql`
{
getHistogram (deviceID:"ARMS-NVM-P16", startTimestamp:1525201056) {
columns {
binWidth
binHeight
binCenter
}
}
}
`}
>
{({
loading: queryLoading,
error: queryError,
data: queryData,
refetch
}) => (
<Subscription
subscription={gql`
subscription onChangedWeatherIntervals {
onChangedWeatherIntervals {
changedItems {
deviceID
timestamp
siteKey
}
}
}
`}>
{({
data: subscriptionData,
loading: subscriptionLoading,
error: subscriptionError
}) => {
if (subscriptionData && !subscriptionLoading) {
console.log("subscriptionData: ", subscriptionData);
//TODO: Add code to inspect subscriptionData & determine if we refetch
//refetch() //Uncommenting causes refetch loop after first server push
}
if (queryData && !queryLoading) {
console.log("queryData: ", queryData.getHistogram.columns);
return (<p>{queryData.getHistogram.columns[0].binWidth}</p>);
}
return null
}}
</Subscription>
)
}
</Query>
因为subscriptionLoading 是true 仅在挂载后的第一个服务器推送之前,我不确定区分重新渲染和新订阅数据的最佳方法。我应该将subscriptionData 存储到state.subscriptionData 并在每次渲染时比较两者吗?
有没有更优雅的方法来解决所有这些问题?
【问题讨论】:
标签: reactjs graphql react-apollo