如何使我的useQuery()在第一次呈现和后续事件(例如,按钮单击)上都触发?
据我所读,当React挂载第一次调用useQuery
的组件时,阿波罗会自动执行查询,如果我想响应某个事件执行该查询,我可以使用useLazyQuery
来返回一个可以调用的函数。如果我想两者兼得呢?
不太清楚我对function钩子的理解中的哪一部分是不正确的或不完整的,但我尝试在useQuery
中使用useQuery
,这肯定允许我调用该函数,但似乎并不总是在组件挂载上触发(更令人困惑的是,有时会触发,有时不会)。我也在使用notifyOnNetworkStatusChange
,我读到了refetch
需要它来认识到它应该触发useQuery
的onCompleted
部分。
任何帮助都会很感激,我想我根本不理解胡克斯。谢谢!
我的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
}
});
}
}
});
P.P.S.作为refetch
的一个例子,有时需要调用呈现,而其他时候则不需要,我有另一个useQuery
,它几乎与上面的相同(使用不同的查询),它也有refetch
,但它在第一个加载时呈现。
我有时会看到另一个问题,refetch
获取过时的数据,我不得不使用fetchPolicy: 'cache-and-network'
来修复它。然而,这种情况并不总是发生
发布于 2020-06-26 05:12:03
使用LazyQuery -
const [getTaskType, { loading, data }] = useLazyQuery(GET_TASK_TYPE, {fetchPolicy: 'network-only'}); // fetch policy is to not look for cache and take the data from network only
为了在页面加载上获取数据-
useEffect(() => {
getTaskType();
}, []);
单击按钮随时触发它,只需调用该方法即可。-
<Button
onClick={()=>getTaskType()}>Click Me!
</Button>
https://stackoverflow.com/questions/62587993
复制相似问题