如何让我的 useQuery() 在第一次渲染以及后续事件(例如按钮单击)上触发?
从我读过的内容来看,当 React 挂载useQuery
第一次调用 a 的组件时,Apollo 会自动执行查询,如果我想执行该查询以响应事件,我可以改用useLazyQuery
which 返回一个函数,该函数可以叫做。如果我想两者都做怎么办?
不太确定我对 React 钩子的理解中哪一部分不正确或不完整,但我尝试使用refetch
in useQuery
,这绝对允许我调用该函数,但似乎并不总是在组件安装时触发(更令人困惑的事情是有时会,有时不会)。我还使用notifyOnNetworkStatusChange
,这是我读它需要refetch
认识到它应该触发onCompleted
的一部分useQuery
。
任何帮助将不胜感激,我想我根本不了解 Hooks。谢谢!
PS我的一个例子useQuery
如下:
const { refetch: refetchGetTaskTypes } = useQuery(GET_TASK_TYPES(["taskId", "taskType"]), {
notifyOnNetworkStatusChange: true,
onCompleted: (data) => {
if (data !== undefined && data.getTaskTypes !== undefined && data.getTaskTypes !== state.taskTypes) {
dispatch({
type: 'GET_TASK_TYPES',
payload: {
taskTypes: data.getTaskTypes
}
});
}
}
});
PPS 作为一个例子,refetch
有时需要被调用来渲染,有时不需要,我有另一个useQuery
与上面几乎相同的(具有不同的查询),它也有refetch
,但它在第一次加载时呈现
PPPS 我有时会看到另一个问题,即refetch
获取过时的数据,我必须使用fetchPolicy: 'cache-and-network'
它来修复它。然而,它并不总是发生