我正在研究react-apollo通过graphql调用数据的反应应用程序当我检查浏览器网络选项卡响应它显示数组的所有元素不同但我得到的或console.log()在我的应用程序然后所有元素的数组与第一个元素相同.我不知道如何解决请帮助
我正在使用apollo客户端进行graphql.我在AppApolloModule中设置了我正在AppModule中导入的客户端.我正在一个服务中进行查询,该服务也在AppModule中导入.虽然该服务在AppApolloModule运行之前运行,因此在进行查询时未初始化apollo并且我收到此错误
Error: Client has not been defined yet
Run Code Online (Sandbox Code Playgroud)
AppApolloModule
imports ....
export class AppApolloModule {
constructor(
apollo: Apollo,
httpLink: HttpLink,
private userService: UserService
) {
console.log("apollo module")
apollo.create({
link: httpLink.create({ uri: `${environment.apiBase}/graphql?${this.myService.token}`}),
cache: new InMemoryCache()
})
}
}
Run Code Online (Sandbox Code Playgroud)
应用模块
import { AppApolloModule } from './app.apollo.module';
import { MyService } from './services/my.service';
export class AppModule {
constructor() {
console.log("app module")
}
}
Run Code Online (Sandbox Code Playgroud)
我没有得到两个控制台app模块和apollo模块,因为服务首先运行,它没有找到任何初始化的apollo应用程序,因此打破了代码.
如何以高效和标准的方式在服务或任何服务之前运行apollo?
完成服务器调用后,我想重新获取特定查询。Apollo API 有一个突变选项,可以让您重新获取,但我想在没有突变的情况下重新获取。
我需要在 GraphQL 突变中发布大量有效负载。如何提高 Apollo Server 的主体大小限制?
我使用的是apollo-server-express2.9.3版本。
我的代码(简化):
const myGraphQLSchema = new GraphQLSchema({
query: new GraphQLObjectType({
name: 'Query',
fields: {
user: UserQuery,
},
}),
mutation: new GraphQLObjectType({
name: 'Mutation',
fields: () => ({
...UserMutations,
}),
}),
});
const apolloServer = new ApolloServer(schema: myGraphQLSchema);
const app = express();
app.use(apolloServer.getMiddleware({ path: '/graphql' });
Run Code Online (Sandbox Code Playgroud) 我有以下架构:
type Post {
id: ID!
text: String
}
Run Code Online (Sandbox Code Playgroud)
我正在使用自动生成的突变neo4j-graphql.js,因此我可以访问以下突变:
UpdatePost(
id: ID!
text: String
): Post
Run Code Online (Sandbox Code Playgroud)
问题:
当我使用以下查询时:
mutation update($id: String, $text: String) {
UpdatePost(id: $id, text: $text) {
id
text
}
}
Run Code Online (Sandbox Code Playgroud)
具有以下参数:
{
"id": "a19289b3-a191-46e2-9912-5a3d1b067cb2",
"text": "text"
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
{
"error": {
"errors": [
{
"message": "Variable \"$id\" of type \"String\" used in position expecting type \"ID!\".",
"locations": [
{
"line": 1,
"column": 17
},
{
"line": 2,
"column": 18
}
],
"extensions": {
"code": …Run Code Online (Sandbox Code Playgroud) 我想订阅 GraphQL 服务器。该应用程序在 NodeJS 脚本中运行(即不在网络浏览器中)。
这是我目前所做的:
const fetch = require("node-fetch").default;
const apollo = require("apollo-boost");
const ApolloClient = apollo.default;
const { gql } = require("apollo-server");
const apolloClient = new ApolloClient({
uri: "http://localhost:4000/graphql",
fetch
});
apolloClient.subscribe({
query: gql`
subscription {
startTaskRequested {
pkRobot
taskName
}
}
`,
}).subscribe({
next(x) { console.log(x) },
error(err) { console.log(`Finished with error: ${ err }`) },
complete() { console.log('Finished') }
});
Run Code Online (Sandbox Code Playgroud)
结果输出是:
{ data: { startTaskRequested: null } }
Finished
Run Code Online (Sandbox Code Playgroud)
在 GraphQL Server 上,我可以看到相应的解析器从未被调用。
如果我使用 Apollo 的 …
有人尝试过有条件调用吗useSubscription?我想在完成useSubscription后立即打电话。useLazyQuery例如,当我填充数据表时,应useLazyQuery在表中显示获取的数据后立即调用订阅。以便表保持更新。useLazyQuery在安装组件时调用。如果有,请与我分享您的解决方案。谢谢!
我最近刚刚开始学习 GraphQL 和 React-Apollo,我想知道如果我需要在同一个组件中使用useQuery和挂钩,推荐的使用方法是什么。useMutation由于两个钩子都返回{data, loading, error}对象,因此名称存在冲突。我应该在解构时为属性分配唯一的名称,还是将逻辑移动到单独的容器组件更好?
我有一个带有 React 和 Apollo Client 的前端,并且正在尝试编写一些简单的测试。
我的应用程序如下所示:
ApolloProvider.js
import React from "react"
import App from "./App"
import ApolloClient from "apollo-client"
import { InMemoryCache } from "apollo-cache-inmemory"
import { createHttpLink } from "apollo-link-http"
import { ApolloProvider } from "@apollo/react-hooks"
import { setContext } from "apollo-link-context"
const httpLink = createHttpLink({
uri: "...backend....",
})
const authLink = setContext(() => {
const token = localStorage.getItem("jwtToken")
return {
headers: {
Authorization: token ? `Bearer ${token}` : "",
},
}
})
const client = new ApolloClient({ …Run Code Online (Sandbox Code Playgroud) apollo reactjs react-apollo apollo-client react-testing-library
我对 GraphQL 有点陌生,这个问题属于“它不可能这么难。我必须遗漏一些东西。”
我有一个相当标准的 GraphQL/Apollo/React 应用程序,分为客户端和服务器。客户端调用 API 并从服务器获取数据时,一切都运行良好。客户端甚至可以将文件上传到服务器。但是,我现在需要服务器流回保存在磁盘上的文件。就是这样。
这是“我必须遗漏一些东西”的部分。我在文档和 Stackoverflow 上看到的所有内容都是从服务器推回文件并通过 GraphQL 查询作为 Base64 编码的字符串,然后在客户端上执行一些非常 hacky 的操作,通常涉及隐藏的 href 标签和模拟点击。对此我说:“什么???”
严重地。磁盘上有服务器知道如何查找的文件。客户端需要向用户显示一个按钮,用户可以单击该按钮来下载文件。就是这样。所有其他语言的其他框架都有一个简单的方法来做到这一点。有人可以告诉我我在这里缺少的极其简单的事情吗?
谢谢,亚历克斯
apollo ×10
graphql ×7
reactjs ×5
react-apollo ×3
angular ×1
express ×1
grandstack ×1
graphql-js ×1
javascript ×1
node.js ×1
react-hooks ×1