ApolloClient:订阅删除后,UI(ROOT_QUERY)未更新

时间:2019-07-27 13:02:34

标签: apollo react-apollo apollo-client

阿波罗客户端:2.6.3
react-apollo: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>

,生成的输出如下:

enter image description here

ROOT_Query存储区:

enter image description here

我在这里俯瞰什么?如何解决?

1 个答案:

答案 0 :(得分:0)

因此,我通过将父查询的fetchPolicy更改为“缓存并网络”并确保ID出现在每个需要标准化结果的查询中来解决此问题,如此处所述:Issue with automatic UI updates in Apollo: `updateQuery` not working properly with `subscribeToMore`