1

这是我的 Apollo 订阅客户端代码,基于 Githunt-React-master 示例代码:

componentWillReceiveProps(nextProps) {
    const fromID = Meteor.userId();
    const toID = nextProps.toID;
    if (!this.subscription && !nextProps.loading) {
        this.subscription = this.props.subscribeToMore({
            document: IM_SUBSCRIPTION_QUERY,
            variables: {fromID: `${fromID}`, toID: `${toID}`},
            updateQuery: (previousResult, {subscriptionData}) => {
                if (!subscriptionData.data) {
                    return previousResult;
                }
                const newFeedItem = subscriptionData.data.createIM[0];
                return update(previousResult, {
                    instant_message: {
                        $push: [newMsg],
                    },
                });
            }
        });
    }
}

我的订阅解析器没有被调用。也就是说,debugger放置在其中的语句永远不会停止程序执行。

我错过了什么?

提前感谢所有人提供的任何信息。

4

1 回答 1

0

在标准情况下this.props不包含subscribeToMore功能。它被添加到 githunt react master 的文件末尾。

您是否还添加了类似的内容:

const withData = graphql(COMMENT_QUERY, {
  options: ({
    params
  }) => ({
    variables: {
      repoName: `${params.org}/${params.repoName}`
    },
  }),
  props: ({
    data: {
      loading,
      currentUser,
      entry,
      subscribeToMore
    }
  }) => ({
    loading,
    currentUser,
    entry,
    subscribeToMore, // props.data.subscribeToMore is mapped to props.subscribeToMore
  }),
});

否则,您可以尝试this.props.data.subscribeToMore在您的 componentWillRecieveProps 功能中使用

于 2017-06-29T07:44:27.793 回答