Apollo Graphql fetchMore、updateQuery 不更新状态

Niz*_*une 6 apollo reactjs graphql react-apollo

我目前正在尝试在我的posts. 这里使用 Apollo graphql 是我的 useQuery

const { data: postsData, fetchMore } = useQuery(POSTS_BY_USER_DRAFT, {
fetchPolicy: 'network-only',
variables: {
  user: user.id,
  start: 0,
  limit: limit
},
onCompleted: () => {
  setTotal(postsData[model].meta.pagination.total)
}})
Run Code Online (Sandbox Code Playgroud)

这是我的 onClick 处理程序,用于获取更多内容posts

const loadMorePosts = async () => {
const nextStart = start + limit
setStart(nextStart);
await fetchMore({
  variables: {
    user: user.id,
    offset: nextStart,
    limit: limit,
  },
  updateQuery: (prevResult, { fetchMoreResult }) => {
    if (!fetchMoreResult) {
      return prevResult
    }
    const prevData = prevResult[model].data
    const moreData = fetchMoreResult[model].data

    fetchMoreResult[model].data = [...prevData, ...moreData]
    // fetchMoreResult[model].data = [...moreData]
    return fetchMoreResult
  },
})}
Run Code Online (Sandbox Code Playgroud)

我的查询成功,因为我确实正确获取了数据,但postsData没有更新

[注意]:如果我切换fetchMoreResult[model].data = [...prevData, ...moreData]fetchMoreResult[model].data = [...moreData] 我的postsData确实会更新。

我已经尝试了return { ...fetchMoreResult }多种返回数据的方法,担心存在不变性/比较问题,但它似乎不起作用。

Niz*_*une 5

我不知道为什么,但为 Apollo 设置 fetchPolicy 就可以完成这项工作

const client = new ApolloClient({


link: authLink.concat(httpLink),
  cache: new InMemoryCache({
    typePolicies: {
      Publication: {
        merge: true,
      },
      Post: {
        merge: true,
      },
    },
  }),
  defaultOptions: defaultOptions,
})
Run Code Online (Sandbox Code Playgroud)