我有一个名为GraphQL Bookstore的示例应用,可以创建图书,出版商和作者,并展示他们之间的关系。我正在使用订阅来实时显示更新。
由于某种原因,我的# sudo grep -R bind-address /etc
订阅完全绕过了BOOK_ADDED
包装器。它调用包装类,graphql
道具设置为books
。代码的相关部分如下所示(您可以看到完整代码here)。
undefined
基本上,当客户端收到订阅通知时,会调用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));
函数 - 正如预期的那样。但是,只要该函数退出,就会直接调用包装类的updateQuery()
方法,并将render()
设置为books
。我希望调用undefined
包装器,在调用graphql
方法之前正确设置道具。我错过了什么?
提前致谢!