- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我想使用 Apollo Client React hook“useQuery”来查询运行 Apollo Server 的 graphql 后端。
但是定义的查询 const of 将会返回一个错误:Uncaught TypeError:(...) 不是一个函数,因此页面根本不会渲染。
我的 ApolloClient 和提供商设置如下:
index.js:
import React from 'react';
import { render } from 'react-dom';
import { BrowserRouter as Router } from 'react-router-dom';
import { ApolloClient } from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { HttpLink } from 'apollo-link-http';
import { onError } from 'apollo-link-error';
import { ApolloLink, from } from 'apollo-link';
import { ApolloProvider } from 'react-apollo';
import { createUploadLink } from 'apollo-upload-client';
import 'bootstrap/dist/css/bootstrap.min.css';
import App from './components/App';
import './index.css';
const uploadLink = createUploadLink({ uri: process.env.REACT_APP_API_URL });
const httpLink = new HttpLink({
uri: process.env.REACT_APP_API_URL,
credentials: 'same-origin'
});
const cache = new InMemoryCache();
const client = new ApolloClient({
link: ApolloLink.from([
onError(({ graphQLErrors, networkError }) => {
if (graphQLErrors)
graphQLErrors.forEach(({ message, locations, path }) =>
console.log(
`[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`
)
);
if (networkError) console.log(`[Network error]: ${networkError}`);
}),
httpLink,
uploadLink
]),
cache,
uri: process.env.REACT_APP_API_URL
});
render(
<ApolloProvider client={client}>
<Router>
<App />
</Router>
</ApolloProvider>,
document.getElementById('app')
);
应用程序组件将触发查询:
components/game/GamePage.js:
import React, { Component } from 'react';
// import GameForm from './gameform';
import GameRules from './gamerules';
// import PropTypes from 'prop-types';
import { gql } from 'graphql-tag';
import { useQuery } from '@apollo/react-hooks';
class GamePage extends Component {
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
this.GET_ALL_PLAYERS = gql`
query allPlayers {
allPlayers {
id
name
nickname
}
}
`;
}
state = { selectedGame: 'X01' };
componentDidMount() {
// const players = this.props;
// players.loadPlayers().catch(err => {
// alert('Loading players failed. ' + err);
// });
const { loading, error, data } = useQuery(this.GET_ALL_PLAYERS);
if (loading) console.log('Loading...');
if (error) console.log(`Error! ${error.message}`);
console.log(data);
}
handleSubmit = gameObject => {
console.log(gameObject);
// this.props.createGame(gameObject);
};
handleGameChange = game => {
this.setState({
selectedGame: game
});
};
render() {
const styles = {
margin: '20px'
};
return (
<div className="container-fluid">
<div className="row">
<div className="col-md-6">
<h2 style={styles}>Game Setup</h2>
{/* <GameForm
players={this.props.players}
onSubmit={this.handleSubmit}
onGameChange={this.handleGameChange}
/> */}
</div>
<div className="col-md-6">
<h2 style={styles}>Game Rules</h2>
<GameRules game={this.state.selectedGame} />
</div>
</div>
</div>
);
}
}
// GamePage.propTypes = {
// players: PropTypes.array,
// games: PropTypes.array,
// createGame: PropTypes.func.isRequired
// };
export default GamePage;
加载应用程序时,它会出现上述错误。我按照我能在 2 小时内通过谷歌搜索和 YouTube 找到的所有教程进行操作。但我自己无法解决。除此之外,后端工作得很好。使用ApolloServer的Webserver测试工具进行了测试。
有问题的部分是这样的:
this.GET_ALL_PLAYERS = gql`
query playersList {
allPlayers {
id
name
nickname
}
}
`;
因此,任何帮助将不胜感激。谢谢
<小时/>编辑:将 {gql} 导入更改为 gql 后出现新错误
最佳答案
如果没有看到完整的错误(包括跟踪),很难确定,但我怀疑您没有正确导入from
。 apollo-link
模块确实导出一个名为 ApolloLink
的类,但该类没有名为 from
的静态方法。相反,您正在寻找来自同一模块的另一个命名导出:
import { from } from 'apollo-link'
另请注意,react-apollo-hooks
模块现已弃用,因为 hooks API 现在是 react-apollo
的一部分。您应该升级 react-apollo
并仅对钩子(Hook)和任何旧组件使用单个 ApolloProvider。
编辑:
查看您的错误,问题出在 GamePage
构造函数内(请注意第一行是 at new GamePage
)。同样,这里存在导入问题,因为 graphql-tag
没有名为 gql
的命名导入。该模块只有默认导出,如文档中所示:
import gql from 'graphql-tag'
关于javascript - React Apollo 客户端 useQuery Hook gql Uncaught TypeError :(. ..) 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59903983/
我正在尝试像这样使用 useQueries function App({ users }) { const userQueries = useQueries( users.map(us
我在 react 应用程序中有以下结构: 此提供程序使用 useQuery从后端获取对象。与 useContext我让应用程序的所有组件都可以访问它: const EventProvider
我正在使用 React 和 Apollo,我正在尝试使用 useQuery Hook 获取的数据来初始化状态,但在加载页面时出现“无法读取未定义的属性‘map’”。 const { loading,
我有一个接受输入参数的查询,比如日期 const { loading, data, error } = useQuery(GET_LIST, { variables: { in
所以我的例子: const Component = () => { const [param, setParam] = useState('defaul') const { isLoading
正如我们所知,当它的 props 或 state 发生变化时,react 组件会重新渲染。 现在我正在使用 useQuery来自 react-apollo包如下: import { gql, useQ
我是 Nextjs 的新手,对 Nextjs 中的客户端渲染和服务器端渲染有一些疑问 我看到有两种方法可以在 Nextjs 上获取数据。其中之一是使用 useQuery hook 但只能在 React
我对 graphQL 和 Apollo 相当陌生。我希望我能说清楚: 我正在使用 apollo/react-hook 获取数据 useQuery .之后我用数据填充表单,以便客户端可以更改它。完成后,
我正在使用 React Apollo 从我的服务器获取数据。当我的页面加载时,我使用 useQuery 来检索数据。这工作正常。问题是当我对搜索表单进行更改时,这会更新导致不需要的重新渲染的状态,从而
我正在使用“react-query”从组件调用 API。出于这个问题的目的,我从 API 返回一个模拟响应。 每次我打开下拉菜单时,都会调用 useQuery 函数,该函数又会调用模拟 API。 Ap
我正在使用“react-query”从组件调用 API。出于这个问题的目的,我从 API 返回一个模拟响应。 每次我打开下拉菜单时,都会调用 useQuery 函数,该函数又会调用模拟 API。 Ap
我正在尝试使用以下代码一次执行 urql useQuery 。但由于某种原因,每次重新渲染都会调用它。 根据文档 https://formidable.com/open-source/urql/doc
我有一个使用 Apollo 钩子(Hook)库的 useQuery 钩子(Hook)的 React 组件。我在测试此组件时遇到问题。这是我当前的设置。 import React from 'react
我有这样的代码 const [inputComment, setInputComment] = useState(''); const [ commentPost, { data: data4
试图了解 useQuery 如何在后台执行。当首先呈现 Booklist 组件时,调用 booklist 函数并调用 usequery Hook ,它返回加载设置为 true 并开始在后台执行 gra
我有循环 - forEach - 它为数组的每个元素找到 productId。我想使用 apollo 查询通过 productId 获取我的数据库。 怎么做? products.forEach(({
因为 Rules of Hooks ,不应该有条件地调用钩子(Hook)。那么如何使用 useQuery 有条件地获取数据? ?例如,假设我想在功能组件中获取数据,但前提是 someState ===
我正在尝试将 react-query 集成到我的 React 项目中。我有一个自定义 Hook - useBundles它从 GraphQl 端点获取数据,如下所示 - function useBun
我有以下组件,它有一个 date多变的。在每次重新渲染时,date变量正在更新。现在的问题是,当我将日期分配给查询变量时,graphql 一次又一次地无限获取。我调试了代码,发现 apollo 正在观
使用 react-apollo-hook 时如何将参数传递给 useQuery? 这不起作用: const { data, loading, error } = useQuery(GET_DATA
我是一名优秀的程序员,十分优秀!