【发布时间】:2020-10-16 15:46:12
【问题描述】:
如何让我的 useQuery() 在第一次渲染以及后续事件(例如按钮单击)时触发?
根据我的阅读,当 React 首次挂载一个调用 useQuery 的组件时,Apollo 会自动执行查询,如果我想执行该查询以响应事件,我可以改为使用useLazyQuery 返回一个可以调用的函数。如果我想两者都做怎么办?
不太确定我对 React 钩子的哪一部分理解不正确或不完整,但我尝试在 useQuery 中使用 refetch,这绝对允许我调用该函数,但似乎并不总是在组件安装时触发(更令人困惑的是,有时会,有时不会)。我也在使用notifyOnNetworkStatusChange,我读到它需要refetch 来识别它应该触发useQuery 的onCompleted 部分。
任何帮助将不胜感激,我想我根本不了解 Hooks。谢谢!
附:我的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
}
});
}
}
});
附言作为refetch 的示例,有时需要调用来渲染而其他时候不需要,我有另一个useQuery,它与上面几乎相同(使用不同的查询)也有refetch,但它首先呈现加载
P.P.P.S.我有时会看到refetch 获取过时数据的另一个问题,我必须使用fetchPolicy: 'cache-and-network' 来修复它。然而,这并不总是发生
【问题讨论】:
-
使用 useLazyQuery,然后在 useEffect(()->{},[]) 中调用它,它将处理您的初始负载。
标签: reactjs graphql react-hooks