当前位置: 首页 > 知识库问答 >
问题:

如何将React挂钩(useContext、useEffect)与Apollo React挂钩(useQuery)结合起来

燕元明
2023-03-14

我试图创建一个简单的组件,从Apollo GraphQL服务器(查询)返回我的所有组织。我想从一个上下文状态呈现所有这些组织,在这个上下文状态下,在组件挂载(由useEffect挂钩处理)之后,可以使用分派方法放置这些组织。

如果状态结果(organizations数组)为空,useEffect钩子应该调用函数getOrganizations,然后调用自定义钩子useGetOrganizations。UseGetOrganizations钩子使用@apollo/react钩子中的useQuery。

不幸的是,这不起作用,我的控制台说,“/src/components/organizations/organizations.js第32:13行:React Hook“usegetorganizations”在函数“getorganizations”中被调用,它既不是React函数组件,也不是自定义React Hook函数React Hook/rules of Hook”

求你了,你能帮我吗?

    import React, { useEffect } from 'react';
    import { useQuery } from '@apollo/react-hooks';

    import ORGANIZATIONS_QUERY from './OrganizationsGraphql';
    import { Store } from '../../store/Store';

    const Organizations = props => {
        const { state, dispatch } = React.useContext(Store);

        useEffect(() => {
            getOrganizations();
        });

        const useGetOrganisations = async () => {
            const { data, loading, error } = useQuery(ORGANISATIONS_QUERY);

            if (loading) {
                return 'Loading...';
            }
            if (error) {
                return `Error! ${error.message}`;
            }

            return dispatch({
                type: 'FETCH_ORGANISATIONS',
                payload: data.organizations,
            });
        };

        const getOrganizations = () => {
            if (state.organizations.length === 0) {
                useGetOrganizations();
            }
        };

        return (
            <div>
                <h1>All organisations</h1>
                {console.log(state.organizations)}
            </div>
        );
    };

    export default Organizations;

共有1个答案

宗政财
2023-03-14

Try:(使用refetch)

    const { data, loading, error, refetch } = useQuery(ORGANISATIONS_QUERY);
    const useGetOrganisations = async () => {

        if (loading) {
            return 'Loading...';
        }
        if (error) {
            return `Error! ${error.message}`;
        }

        return dispatch({
            type: 'FETCH_ORGANISATIONS',
            payload: data.organizations,
        });
    };
 类似资料:
  • 有人能解释一下我做错了什么吗?我有一个react功能组件,在其中我使用useEffect钩子从服务器获取一些数据,并将这些数据放入状态值。在获取数据之后,在同一个useHook中,我需要使用该状态值,但由于某些原因,该值是明确的。看看我的示例,console有一个空字符串,但在浏览器上我可以看到该值。 链接到codesandbox。

  • 更新状态的正确方式是什么,是一个嵌套对象,在与钩子反应? 如何使用将更新为(附加字段)? (更改值)?

  • 如何使用钩子(或任何其他钩子)来复制? 在传统的类组件中,我将执行以下操作: 使用hook: (完整示例:https://codesandbox.io/s/2oo7zqzx1n) 这不起作用,因为在中返回的“cleanup”函数捕获装载期间的道具,而不是卸载期间的道具状态。 如何在不运行函数体(或清除)的情况下对每个道具更改进行清理? 一个类似的问题并没有涉及获得最新道具的部分。 文件状态为: 如

  • 我的结构如下: 我试图用新数据更新指标: 现在我得到的是以下错误: 我正在努力找出为什么状态是空的,我如何甚至控制台日志它的值来调试问题。

  • 问题内容: 我正在学习有关如何使用钩子注册事件的Udemy课程,讲师给出了以下代码: 现在效果很好,但我不认为这是正确的方法。原因是,如果我理解正确,则每次重新渲染时,事件都会每次都在注册和注销,并且我根本认为这样做不是正确的方法。 所以我对下面的钩子做了一些修改 通过使用一个空数组作为第二个参数,使组件只运行一次效果,即模仿。当我尝试结果时,奇怪的是,在我键入的每个键上都没有附加,而是被覆盖了。

  • 获取以下错误。请帮忙。第9:36行:不能在类组件中调用React钩子“useContext”。必须在React函数组件或自定义React钩子函数中调用React钩子。React钩子/钩子规则第9:47行:“AccountContext”未定义未定义未定义第126:37行:“switchToSignup”未定义未定义未定义 搜索关键字以了解有关每个错误的更多信息。