如何解决阿波罗订阅与过滤器顺序混淆
const Mutation = {
readMessage: (_,{ input: { roomId,userId } }) => {
console.log('READ MESSAGE')
const room = RoomAPI.updateReadMessageId(userId,roomId)
pubsub.publish(MESSAGE_READ,{ messageRead: room,roomId })
return true
},}
const Subscription = {
messageRead: {
subscribe: withFilter(
() => {
console.log('WITH FILTER')
return pubsub.asyncIterator([MESSAGE_READ])
},(payload,{ input: { roomId } }) => {
console.log(payload)
return payload.roomId === roomId
},),},}
当readMessage
突变到达服务器时,我猜控制台日志的正确顺序是:
- 阅读消息
- 带过滤器
- console.log(payload)
然而,这个顺序被混淆如下:
- 带过滤器
- 阅读消息
- console.log(payload)
有时
- 阅读消息
- console.log(payload)
- 带过滤器
甚至
- 阅读消息
- 带过滤器 (没有 console.log(payload))
导致 apollo client
什么也没有收到。
我不确定这种关系是什么,但这种行为是在我添加 react-transition-group
后开始的。
const generateRoutes = () =>
routes.map(route => <Route key={route.path} path={route.path} exact component={route.component} />)
return (
<TransitionGroup className={slideDirection}>
<CSSTransition key={location.key} classNames="slide" timeout={500}>
<div className="slide-container">
<Switch location={location}>{generateRoutes()}</Switch>
</div>
</CSSTransition>
</TransitionGroup>
)
有人知道为什么会这样吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。