React Apollo订阅绕过graphql包装器

React Apollo订阅绕过graphql包装器,graphql,react-apollo,apollo-client,apollo-server,graphql-subscriptions,Graphql,React Apollo,Apollo Client,Apollo Server,Graphql Subscriptions,我有一个名为的示例应用程序,它可以创建书籍、出版商和作者,并显示它们之间的关系。我使用订阅实时显示更新 出于某种原因,我添加的BOOK\u订阅完全绕过了graphql包装。它正在调用包装类,并将booksprop设置为undefined。代码的相关部分如下所示(您可以看到完整的代码) 类BooksContainerBase扩展React.Component{ 组件willmount(){ const{subscribeToMore}=this.props; 下标托莫尔({ 文件:增加了BOOK_

我有一个名为的示例应用程序,它可以创建书籍、出版商和作者,并显示它们之间的关系。我使用订阅实时显示更新

出于某种原因,我添加的
BOOK\u
订阅完全绕过了
graphql
包装。它正在调用包装类,并将
books
prop设置为
undefined
。代码的相关部分如下所示(您可以看到完整的代码)

类BooksContainerBase扩展React.Component{
组件willmount(){
const{subscribeToMore}=this.props;
下标托莫尔({
文件:增加了BOOK_,
updateQuery:(prev,{subscriptionData})=>{
如果(!subscriptionData.data){
返回上一个;
}
const newBook=subscriptionData.data.bookAdded;
//不要把这本书加上两份
if(!prev.books.find(book=>book.id==newBook.id)){
返回Object.assign({},prev{
书籍:[…上一本书,新书]
});
}否则{
返回上一个;
}
}
});
}
render(){
const{books}=this.props;
返回;
}
}
...
export const BooksContainer=graphql(图书查询{
道具:({data:{loading,error,subscribeToMore,books}})=>({
加载,
错误,
贝托莫尔,
书
})
})(加载StateViewer(BookContainerBase));
基本上,当客户端接收到订阅通知时,会调用
updateQuery()
函数-正如预期的那样。但是,一旦该函数退出,就直接调用包装类的
render()
方法,并将
books
设置为
undefined
。我希望调用
graphql
包装器,在调用
render()
方法之前正确设置道具。我错过了什么

提前谢谢

class BooksContainerBase extends React.Component {
    componentWillMount() {
        const { subscribeToMore } = this.props;
        subscribeToMore({
            document: BOOK_ADDED,
            updateQuery: (prev, { subscriptionData }) => {
                if (!subscriptionData.data) {
                    return prev;
                }

                const newBook = subscriptionData.data.bookAdded;

                // Don't double add the book
                if (!prev.books.find(book => book.id === newBook.id)) {
                    return Object.assign({}, prev, {
                        books: [...prev.books, newBook]
                    });
                } else {
                    return prev;
                }
            }
        });
    }

    render() {
        const { books } = this.props;
        return <BooksView books={books} />;
    }
}

...

export const BooksContainer = graphql(BOOKS_QUERY, {
    props: ({ data: { loading, error, subscribeToMore, books } }) => ({
        loading,
        error,
        subscribeToMore,
        books
    })
})(LoadingStateViewer(BooksContainerBase));