所以我想使用Apollo客户机react钩子“usequery”查询运行Apollo服务器的graphql后端。
但定义的查询常量将返回一个错误,即:uncattle typeerror:(...)不是一个函数,因此页面根本不会呈现。
我的ApolloClient和提供程序设置如下:
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')
);
组件/游戏/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;
当加载应用程序时,它会给我上面提到的错误。我就像在两个小时内谷歌和YouTube上找到的每一个教程一样。但我自己解决不了。此外,后端工作正常。使用ApolloServer的Webserver测试工具对其进行了测试。
问题的部分是这样的:
this.GET_ALL_PLAYERS = gql`
query playersList {
allPlayers {
id
name
nickname
}
}
`;
编辑:将{gql}导入更改为gql后出现新错误
如果没有看到完整的错误(包括跟踪),很难确定,但我怀疑您没有正确地从导入。
Apollo-Link
模块导出了一个名为ApolloLink
的类,但该类没有名为From
的静态方法。相反,您正在从同一模块中寻找另一个命名导出:
import { from } from 'apollo-link'
另外,请注意,
React-Apollo-Hooks
模块现在不推荐使用,因为hooks API现在是React-Apollo
的一部分。您应该升级react-apollo
,并且只对钩子和任何遗留组件使用单个ApolloProvider。
编辑:
import gql from 'graphql-tag'
问题内容: 我是jQuery的新手,并在旧的教程上使用了以下代码段: 但是我得到这个错误 未捕获的TypeError:$ .ajax(…)。成功不是函数 在 我想知道这里有什么问题吗? 问题答案: 对ajax的调用应如下所示: 您没有方法链接成功函数,它是字典参数中的条目之一。
不知何故,我无法正确使用slick carousel(http://kenwheeler.github.io/slick/)。 我得到以下错误: 我正在javascript文件中运行以下代码: 我已经在Bower中包含了最新的jQuery版本(2.1.4)。我还尝试在布局模板文件的头部包含jQuery CDN,但这也没有解决任何问题。 唯一奇怪的是,当我不使用函数来调用滑块时,它确实起作用,但它给
我正在使用InstaFeed从Instagram获取图片并在网站上展示。 这是我的代码: 我对JS和JQuery很陌生,但我不知道为什么会出现这个错误。错误在以下行: var images=$(“#instafeed”)。find('a');
问题内容: 我正在努力推动 作为新的ID和json字符串的值。但是它给出了以下错误 提前谢谢您的回复 问题答案: 要使用Array的push函数,您的var必须是一个Array。 更改为以下内容: 包含的数组项将是typeof对象,您可以执行以下操作: 注意:请保持一致。在我的示例中,一个数组包含对象属性,而另一个仅包含对象属性。如果我使用或进行迭代,那么我将无法始终检查一个属性,因为我的示例包含
我在控制台中得到以下错误:。 也许问题出在不推荐的JSXTransformer上(https://facebook.github.io/react/blog/2015/06/12/deprecating-jstransform-and-react-tools.html)。建议使用Babel代替(在我的例子中,使用Babel!view/todolist代替jsx!view/todolist)。我对此
对于提交另一个未捕获的TypeError我感到很糟糕:未定义不是一个函数问题。但是,在阅读了大约20种不同的答案后,我不是错过了重点,就是问题在这些情况下是不同的。 我有一个有两个单选按钮的表单。单击一个时,我希望它更改标记的innerHTML。 这是我的小提琴。 HTML: JavaScript: 我尝试了几个不同的版本,比如使用属性和创建命名函数。它们都给了我同样的错误。非常感谢您帮助我了解我