[英]Apollo's useQuery doesn't seem to be executing at all, how can I turn on debug statements or something for Apollo client?
[英]How exactly do I update FlatList's data using Apollo Client's fetchMore method?
我的 GraphQL 后端以以下形式返回数据:
{
data: {
feed: {
A: [...],
B: [...]
}
}
}
我的前端使用对数据中存在的某个字段进行排序来合并A
和B
,然后使用 React Native 的FlatList
将它们显示为单个数组。 我正在使用 Apollo 客户端来查询我的后端,如下所示:
const { fetchMore, loading, data, error } = useQuery(fetchQuery, {variables: fetchArgs});
if (loading) {...}
if (error) {...}
let A = [];
let B = [];
if (data!.feed.A) A = data!.feed.A
if (data!.feed.B) B = data!.feed.B
let feedData = sortedMerge(A,B);
return (
<FlatList
data={feedData}
...
onEndReached{
//update fetchArgs
fetchMore({
variables: fetchArgs,
updateQuery: // Not sure if I need to do anything here?
}).then(result => {
// Maybe this is where I update?
})
}
)
但是,我似乎无法弄清楚如何或在哪里获取新数据,比如A'
和B'
合并并与feedData
连接,以便我的FlatList
可以尽可能高效地更新?
我想我遇到了麻烦,因为我不能直接更新列表并需要做一些预处理,但无论我在哪里更新feedData
,无论是在fetchMore
之后的then
块中还是在它之外, FlatList
永远不会似乎更新。
尝试将合并逻辑放在useMemo
中:
const { fetchMore, loading, data, error } = useQuery(fetchQuery, {variables: fetchArgs});
const feedData = useMemo(() => {
if (data) {
const { A, B } = data.feed;
return sortedMerge(A,B);
} else return [];
},[data]);
if (loading) {...}
if (error) {...}
return (
<FlatList
data={feedData}
...
onEndReached = {() => fetchMore({ variables: fetchArgs })}
/>
)
执行fetchMore
应该会导致data
更新,这将触发useMemo
并更新您的feedData
变量。
但是,您仍然需要将分页结果合并到客户端缓存中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.