там два косяка
- я давно не использую apollo, но если там прилетает апдейт с одинаковым __typename+id и unreadChatMessageChange, то он может это с оптимизировать, потому что данные не поменялись.
- const updatedMessages = 1 если будет всегда там при обновах, то какой смысл дергаться useEffect? там всегда вторым агрументом [1], зависимости не поменялись, поэтому ничего не происходит.
Правильно апи с правильным кодом должно работать в стиле только с useQuery. Правки через подписки должны прилетать через inMemoryCache. Руками в правильной graphql архитектуре никто такое не обновляет.
Если прям сильно хочется руками, то можно что-то вроде
useSubscription(..., { onSubscriptionData: (data) => setMyData(data...) })
делать без useEffect