【发布时间】:2021-01-20 07:01:40
【问题描述】:
当我使用 @apollo/client 调用 graphql api 时出现以下错误
React Hook "useQuery" 在函数 "graphqlService" 中被调用,该函数既不是 React 函数组件也不是自定义 React Hook 函数 react-hooks/rules-of-hooks
索引文件:
import { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';
const client = new ApolloClient({
uri: "http://localhost:3008",
cache: new InMemoryCache()
});
ReactDOM.render(
<ApolloProvider client={client}>
<App/>
</ApolloProvider>,
document.getElementById('root')
);
功能组件文件:
import React from 'react';
import {
useQuery,
gql
} from "@apollo/client";
import Schema from '../models/schema';
function graphqlService( params : any = {} ) {
const query = Schema.getPanelData;
const { data } = useQuery(query, {variables: params});
if (data) return data;
}
export default graphqlService;
类组件文件:
this.data = graphqlService(params);
我不认为这是包中的问题,我在 POC 项目中使用相同的包。它在那里工作正常。唯一不同的是我将所有代码都写在同一个文件中,这里我写在 2 个不同的文件中。
【问题讨论】:
-
如错误所述,您不能在组件之外使用挂钩。您的
graphqlService不是组件 -
我创建了一个功能组件,我在其中使用 UseQuery 方法并从 Class 组件调用该功能组件。我仍然得到相同的错误。我将上述方法更新为功能组件,例如:function graphqlService(params:any = {}){}
-
看不到功能组件,我们帮不了你。
-
我更新了上面的查询,请检查
-
您的 graphqlService 不是一个组件。请阅读文档reactjs.org/docs/components-and-props.html
标签: reactjs graphql apollo apollo-client