用于删除和更新的 React GraphQL 订阅

Posted

技术标签:

【中文标题】用于删除和更新的 React GraphQL 订阅【英文标题】:React GraphQL Subscriptions for Delete and Update 【发布时间】:2018-07-01 22:38:21 【问题描述】:

我正在尝试在 API subscriptions 中使用 GraphQL Apollo,以便在我的 React 项目中更快、更实时地更新。我正在使用"subscriptions-transport-ws": "^0.8.2"。但是删除和更新会引发错误。我对反应和 JS 很陌生,无法完成这项工作。我尝试寻找解决方案,但还没有成功!

这是基本的前端布局:

这是graphql subscriptions的相关反应组件代码:

    componentWillReceiveProps(nextProps) 
        if (!this.subscription && !nextProps.data.loading) 
                let  subscribeToMore  = this.props.data
                this.subscription = [subscribeToMore(
                
                    document: postDeleted,
                    updateQuery: (previousResult,  subscriptionData ) => 
                     const delPost = subscriptionData.data.postDeleted;
                     const mainData = previousResult.Posts;               

                     let post = mainData.find(post => post.id == delPost.id);
                     let updatedList =  mainData.splice(post, 1);
                     return updatedList;
                    ,
                ),
                subscribeToMore(
                
                    document: postUpdated,
                    updateQuery: (previousResult,  subscriptionData ) => 
                        previousResult.Posts = previousResult.Posts.map((p) => 

                        if(p.id === subscriptionData.data.postEdited.id)                     
                        return subscriptionData.data.postEdited
                         else 
                        return p;
                        
                    );
                    return previousResult;
                    ,
                
                )]
        
    

但我面临以下错误:

删除按钮错误: TypeError: Cannot add/remove sealed array elements

更新按钮错误: Cannot assign to read only property 'Posts' of object '#<Object>'

有人可以帮我获取带有 graphql 订阅的组件的实时更新吗?

【问题讨论】:

【参考方案1】:

您的问题与 GraphQL 或订阅无关!

更新:

您正在尝试更改 React Props

previousResult.Posts = previousResult.Posts.map((p) => ...

previousResult 是只读的!

德尔邮政:

mainData.splice(post, 1)delPost 的问题! splice 改变了变量,而mainData 是常量!

【讨论】:

好的,那么您建议什么解决方案?是的,我尝试过更新订阅..但是对于删除操作,我将数据处理为mainDatadelPost..这样的变量也不起作用。 mainData.splice(post, 1) delPost 的问题! splice 更改变量,而 mainData 是 const!

以上是关于用于删除和更新的 React GraphQL 订阅的主要内容,如果未能解决你的问题,请参考以下文章

使用 Express-GraphQL 和 React-Apollo 订阅 GraphQL

如何在 React 中为上传和订阅设置 Apollo 客户端?

Apollo GraphQL 取消订阅似乎坏了

使用带有 React 和 Apollo 的 graphql 订阅制作实时应用程序

React 模拟 Graphql 订阅

求教:最大更新深度超过的原因