Apollo использует подписку, не отправляя новые данные - PullRequest
0 голосов
/ 11 апреля 2020

Я создал подписку каждый раз, когда добавляется новое сообщение. Подписка отлично работает на интерфейсе graphiql.

Вот мой код реакции на использование useSubscription hook

export const SUSCRIBE_POSTS = gql`
  {
    subscription
    posts {
      newPost {
        body
        id
        createdAt
      }
    }
  }
`;

 const {
    loading: suscriptionLoading,
    error: subscriptionError,
    data: subscriptionData,
  } = useSubscription(SUSCRIBE_POSTS);

, когда я пытаюсь утешить журнал subscriptionData Я ничего не получаю. Когда я добавляю сообщение, оно правильно сохраняется в базе данных, хук useQuery для получения сообщений также работает нормально, но когда я добавляю новое сообщение, я не вижу данных подписки. Я не вижу ничего плохого и в консоли. Когда я регистрируюсь suscriptionLoading, Ido становится правдой с самого начала. Я не уверен, как отладить это.

Настройка клиента выполнена правильно в соответствии с документами https://www.apollographql.com/docs/react/data/subscriptions/

, и вот код

const httpLink = createHttpLink({
  uri: "http://localhost:4000/",
});

const wsLink = new WebSocketLink({
  uri: `ws://localhost:4000/graphql`,
  options: {
    reconnect: true,
  },
});

const authLink = setContext(() => {
  const token = localStorage.getItem("jwtToken");
  return {
    headers: {
      Authorization: token ? `Bearer ${token}` : "",
    },
  };
});

const link = split(
  // split based on operation type
  ({ query }) => {
    const definition = getMainDefinition(query);
    return (
      definition.kind === "OperationDefinition" &&
      definition.operation === "subscription"
    );
  },
  wsLink,
  authLink.concat(httpLink)
);

const client = new ApolloClient({
  link: link,
  cache: new InMemoryCache(),

});

export default (
  <ApolloProvider client={client}>
    <App />
  </ApolloProvider>
);

1 Ответ

1 голос
/ 13 апреля 2020
export const SUSCRIBE_POSTS = gql`
    subscription
    posts {
      newPost {
        body
        id
        createdAt
      }
    }
`;

Можете ли вы попытаться удалить самые внешние скобки подписки gql?

...