![](/img/trans.png)
[英]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.