[英]How do I refetchQueries when query is called using useLazyQuery hook?
[英]How do I conditionally pass the DocumentNode parameter to a useLazyQuery hook depending on the state of my application?
我正在嘗試根據應用程序中的某些 state 更改使用 useLazyQuery 掛鈎調用不同類型的查詢。 有沒有辦法在沒有 DocumentNode 的情況下初始化 useLazyQuery() ,然后傳遞 DocumentNode 參數並調用查詢?
在這里進一步解釋是我的代碼,解釋了我希望實現的目標。
export const Interactions: React.FC<interactionsProps> = ({}) => {
const [state, dispatch] = useReducer(InteractionListReducer, null);
const { data: usersData } = useUsersQuery();
const { data: filters } = useGet_FiltersQuery();
const [getInteractions,{data: interactionData, refetch: refetchInteraction, fetchMore}] = useLazyQuery()
// useLazyQuery REQUIRES A DOCUMENTNODE (QUERY AS PARAMETER) BUT I DO NOT KNOW THE TYPE OF QUERY YET
useEffect(() => {
if (state?.filterSelected?.id) {
//THIS RETURNS THE DOCUMENT NODE BASED ON THE FILTER SELECTED
const queryNode = getInteractionsQueryType(state.filterSelected.system);
//THEN HERE I WANT TO CALL THE HOOK WITH THE DOCUMENTNODE THAT I JUST OBTAINED
getInteractions({query: queryNode })
}
}, [state?.filterSelected?.id]);
是否可以使用 useLazyQuery 掛鈎實現此目的? 如果沒有,是否有一種替代方法可以根據應用程序的 state 實現這種查詢?
鈎子的規則之一是組件內部運行的鈎子數量不應該改變,即不要有條件地運行一個鈎子。
考慮到這一點:
{readyForInteractions ? <Interactions /> : null }
useLazyQuery
中使用任何你想要的查詢,甚至是基於 state 而變化的查詢作為進一步的優化:
query interactions {
useUsers {
field1
field2
}
useGetFilters {
fieldA
fieldB
}
}
這將使處理loading
和error
狀態變得更加簡單,同時也消除了冗余的網絡請求。
getInteractionsQueryType(state.filterSelected.system)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.