突变后无法更新缓存

时间:2020-09-16 10:43:25

标签: javascript reactjs react-native graphql apollo

我有一个屏幕,可以在其中运行查询并根据结果呈现一些项目:

query getMyFavoritePlaces($myID: String) {
  favorite_place(where: { user_id: { _eq: $myID } }) {
    id
    location
    label
    user{
      id
    }
    user_id
  }
}
const { data, error } = useGetMyFavoritePlacesQuery({ variables: { myID: profile.id }});
{
    data && (
    <FlatList
      data={data.favorite_place}
      renderItem={({ item }) => <FavoriteLocationEntry place={item} />}
      keyExtractor={(item) => item.id.toString()} />
    )
}

当我通过点击单位中的任何项目来运行此突变时:

mutation RemoveFavoriteLocation($id: Int!) {
  delete_favorite_place_by_pk(id: $id) {
    id
    location
    label
    user{
      favorite_places {
        id
         location
          label
      }
    }
    user_id
  }
}

对象已成功删除,并且UI也已更新。但是,我收到警告

替换查询对象的favourite_place字段时,缓存数据可能会丢失。 要解决此问题,请为Query.favorite_place字段定义一个自定义合并函数,以便InMemoryCache可以安全地合并以下对象:{...} enter image description here

此处显示的值是ID。我已经在查询和变异中都返回了ID。那我该怎么解决?

在突变内可能无法运行favourite_place查询本身。

1 个答案:

答案 0 :(得分:0)

您的突变需要为用户添加一个id字段,否则可能会误删除其他用户的favourite_place字段:

Order

P.s请不要在星号上加上星号,以使焦点对准丢失的财产。