В настоящее время я пытаюсь реализовать разбиение на страницы на моем 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)
}})
и вот мой обработчик 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
},
})}
Мои запросы выполняются успешно, так как я правильно получаю данные, однако postsData не обновляется
[ЗАМЕЧАНО]: Если я переключу fetchMoreResult[model].data = [...prevData, ...moreData] на
fetchMoreResult[model].data = [...moreData] мой postsData обновляется.
Я пробовал return { ...fetchMoreResult } и несколько способов возврата данных, опасаясь проблемы неизменности/сравнения, но, похоже, это не сработало.


Я не уверен, почему, но установка fetchPolicy для Apollo сделает эту работу.
const client = new ApolloClient({
link: authLink.concat(httpLink),
cache: new InMemoryCache({
typePolicies: {
Publication: {
merge: true,
},
Post: {
merge: true,
},
},
}),
defaultOptions: defaultOptions,
})