首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在第一次呈现和onclick两种情况下呈现useQuery?[ReactJS,graphql]

如何在第一次呈现和onclick两种情况下呈现useQuery?[ReactJS,graphql]
EN

Stack Overflow用户
提问于 2020-06-26 04:22:16
回答 2查看 7.1K关注 0票数 1

如何使我的useQuery()在第一次呈现和后续事件(例如,按钮单击)上都触发?

据我所读,当React挂载第一次调用useQuery的组件时,阿波罗会自动执行查询,如果我想响应某个事件执行该查询,我可以使用useLazyQuery来返回一个可以调用的函数。如果我想两者兼得呢?

不太清楚我对function钩子的理解中的哪一部分是不正确的或不完整的,但我尝试在useQuery中使用useQuery,这肯定允许我调用该函数,但似乎并不总是在组件挂载上触发(更令人困惑的是,有时会触发,有时不会)。我也在使用notifyOnNetworkStatusChange,我读到了refetch需要它来认识到它应该触发useQueryonCompleted部分。

任何帮助都会很感激,我想我根本不理解胡克斯。谢谢!

我的useQuery的一个例子如下:

代码语言:javascript
运行
复制
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'来修复它。然而,这种情况并不总是发生

EN

Stack Overflow用户

回答已采纳

发布于 2020-06-26 05:12:03

使用LazyQuery -

代码语言:javascript
运行
复制
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

为了在页面加载上获取数据-

代码语言:javascript
运行
复制
useEffect(() => {
    getTaskType();
}, []);

单击按钮随时触发它,只需调用该方法即可。-

代码语言:javascript
运行
复制
<Button                                                
  onClick={()=>getTaskType()}>Click Me!
</Button>
票数 5
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62587993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档