Apollo useQuery为React应用程序中的订阅提供空结果

时间:2020-07-05 11:20:32

标签: reactjs apollo react-apollo apollo-client

我正在使用Apollo Client(React)3.0。后端正确发送了订阅。

当我同时从后端接收2个订阅(接收和发送)时,结果“上一个”得到的值为空。

我的用例是自动回复某些关键字。例如:

已收到:帮助(子:MESSAGE_RECEIVED_SUBSCRIPTION)

已发送:“自动回复”(子:MESSAGE_SENT_SUBSCRIPTION)

在这种情况下,“ prev”设置为已接收订阅,但未设置为已发送订阅。

这是我的代码:

const { loading, error, data, subscribeToMore } = useQuery<any>(GET_CONVERSATION_QUERY, {
    variables: queryVariables,
  });

  // handle subscription for message received and sent
  const getMessageResponse = useCallback(() => {
    // message received subscription
    subscribeToMore({
      document: MESSAGE_RECEIVED_SUBSCRIPTION,
      variables: queryVariables,
      updateQuery: (prev, { subscriptionData }) => {
        console.log('calling message received sub');
        ...
      },
    });

    // message sent subscription
    subscribeToMore({
      document: MESSAGE_SENT_SUBSCRIPTION,
      variables: queryVariables,
      updateQuery: (prev, { subscriptionData }) => {
        console.log('calling message sent sub');
        ...
      },
    });
  }, [subscribeToMore, queryVariables, updateConversations]);

  useEffect(() => {
    getMessageResponse();
    // we should call useEffect only once hence []
  }, []);

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我发现了问题所在。用于查询和预订的返回值有所不同,因此,它失败了,并且可能再次触发了查询,导致第二次运行结果为空。

希望这会有所帮助!