Подписка React Apollo обходит оболочку graphql
У меня есть пример приложения под названием GraphQL Bookstore, которое создает книги, издателей и авторов и показывает отношения между ними. Я использую подписки, чтобы показывать обновления в режиме реального времени.
Почему-то мой BOOK_ADDED
подписка в обход graphql
обертка полностью. Он вызывает обернутый класс с books
опора установлена 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
будет вызвана обертка, правильно установив реквизит перед вызовом render()
метод. Что мне не хватает?
Заранее спасибо!