首页 > 解决方案 > ApolloClient:订阅删除后 UI (ROOT_QUERY) 未更新

问题描述

阿波罗客户端:2.6.3
反应阿波罗:2.2.1

因此,我有一个在项目删除请求时触发的订阅,但在订阅发生后不更新 UI。

我的订阅代码如下:

              <DeleteItem 
                id={item.id}
                urlReferer={urlReferer}
                subscribeToDeleteItems={() =>
                  subscribeToMore({
                    document: DELETE_ITEM_SUBSCRIPTION,
                    variables: {},
                    updateQuery: (prev, { subscriptionData }) => {
                      if (!subscriptionData.data) return prev;
                      
                      const deletedItem = subscriptionData.data.itemDeleted;
                      let newItemList;
                      console.log("prev = ", prev);
              
                      if (isDuplicateItem(deletedItem.id, prev.me.items)) {
                        newItemList = prev.me.items.filter((item) => {
                          return deletedItem.id !== item.id;
                        });
                        console.log("new item list = ", newItemList);
                      } else {
                        return prev;
                      }

                      return Object.assign({}, prev, {
                        ROOT_QUERY: {
                          me: {
                            items: [newItemList]
                          }
                        }
                      }); 
                    }
                  })
                }
              >Delete This Item</DeleteItem>

生成的输出如下所示:

在此处输入图像描述

ROOT_Query 存储:

在此处输入图像描述

我在这里忽略了什么,我该如何解决?

标签: apolloreact-apolloapollo-client

解决方案


因此,我通过将父查询的 fetchPolicy 更改为“缓存和网络”并确保在需要标准化结果的每个查询中都存在 ID 来解决此问题,如此处所述:Apollo 中的自动 UI 更新问题:`updateQuery` not与 `subscribeToMore` 一起正常工作


推荐阅读