Как я могу проверить, есть ли у соединения новые элементы в Relay?

У меня есть следующий контейнер Relay в моем компоненте Feed, который представляет собой простой список сообщений.

export default Relay.createContainer(Feed, {
  initialVariables: {
    count: 5,
  },
  fragments: {
    viewer: () => Relay.QL`
      fragment on Viewer {
        posts(first: $count) {
          pageInfo {
              hasNextPage
          }
          edges {
            node {
              id,
              body
            },
          },
        },
      },
    `,
  },
});

Эти сообщения упорядочены по самым последним, как я могу проверить, есть ли более новые сообщения на моем сервере graphql? Я хочу использовать стратегию вытягивания, пока не перенесу ее на подписки graphql/relay.

Могу ли я использовать forceFetch? Я не хочу обновлять Relay Store, я просто хочу уведомить пользователя, у которого есть новые сообщения.


person Sibelius Seraphini    schedule 07.10.2016    source источник


Ответы (1)


Один из способов, который я мог бы придумать, - это иметь конечную точку, которую вы предоставляете с последней отметкой времени. Эта конечная точка возвращает, например, идентификаторы новых сообщений. На стороне реле вы делаете setTimeout(() => { this.props.relay.setVariables({timestamp: timestamp}); }, 60000) и во фрагменте что-то вроде:

const FooBar = Relay.createContainer(FooBarClass, {
initialVariables: {
    timestamp: null
},
prepareVariables: vars => {
    vars['timestampIsTruthy'] = !!vars['timestamp'];
    return vars;
},
fragments: {
    store: () => Relay.QL`
        fragment on Query {
            newerPosts(timestamp: $timestamp, first: 3) @include(if: $queryIsTruthy) {
                totalCount
                edges {
                    node {
                        id
                    }
                }
            }
        }`,
},
});
person velop    schedule 06.12.2016