因此,我通过在 Next.js 上实现 Apollo 客户端来研究 GraphQL,我从未实现过 GraphQL API 或使用过 Apollo,并且在构建和操作查询时遇到了一些问题。我想使用 SpaceX GraphQL 服务器创建一些静态页面,并使用 getStaticProps 和 getStaticPath 从 SpaceX 服务器获取前 10 个结果,从这些路由创建静态页面并获取每个 id 的发射详细信息。我的问题是,我无法使启动详细信息查询工作。服务器响应 400。由于结构正确,问题一定是在将变量传递给查询时出现的。
再说一遍,我从未实现过 Apollo 客户端,并且对 graphQL 有非常初级的了解,并且无法找到使用文档的问题。我的代码基于此示例,我刚刚删除了 useQuery Hook,以便我可以在 getStaticProps 内发出请求。 https://www.apollographql.com/docs/react/data/queries/
// [launchId].tsx
import { initializeApollo } from '../../lib/ApolloClient'
export const getStaticPaths: GetStaticPaths = async () => {
const apolloClient = initializeApollo()
const {
data: { launchesPast }
} = await apolloClient.query({
query: gql`
{
launchesPast(limit: 10) {
id
}
}
`
})
const paths = launchesPast.map(element …Run Code Online (Sandbox Code Playgroud) 我试图将文件上传到我的 apollo 服务器,但我无法上传任何文件,也不会引发任何错误,但我在解析器中只收到空对象,当我使用像Altair 这样的GraphQL客户端时,它可以正常工作
使用 Altair 客户端时在服务器中输出
{
filename: 'Copy of Massive Orange Summer Sale Animated-300x250px-MediumRectangle.png',
mimetype: 'image/png',
encoding: '7bit',
createReadStream: [Function: createReadStream]
}
Run Code Online (Sandbox Code Playgroud)
使用 @apollo/client 包时服务器中的输出
{}
Run Code Online (Sandbox Code Playgroud)
客户代码

服务器代码

我知道我们也可以使用 apollo 执行休息请求,但我不知道如何执行发布请求,有人可以帮助我吗?
我的 REST post 请求端点是:<url>/transaction/getbyhash
有效负载:
{"hash":"4e23f9e1d1729996de46fc94d28475b4614f101d72a98f221493f900dc33e0c2"}
Run Code Online (Sandbox Code Playgroud)
有人可以帮我使用 apollo 客户端和 graphql-tag 编写相同的请求吗?
我是 Next.js 和 GraphQL 世界的新手。到目前为止,我一直在使用 React 与 reduxjs 和 axios 进行 API 调用。我会学习更高级的东西,所以这是我的问题。如果我使用 apollo graphql,我有哪些本地状态管理选项?它可以由 apollo 本身处理,还是我应该使用像 redux store 这样的外部工具?
我有一个查询返回下面的示例数据
{
__typename: 'Typehere',
name: 'type',
address: 'address type'
}
Run Code Online (Sandbox Code Playgroud)
当我使用useQueryfetchPolicy: 'cache-first' 选项时,GQL API 返回正确的数据。但是当我使用 console.log(response) 时,数据现在将转换为
{
__typename: 'Typehere'
}
Run Code Online (Sandbox Code Playgroud)
fetchPolicy 的 API 调用和响应:“缓存优先”

控制台.log(响应)

为什么会发生这种情况?
我尝试使用 fetchPolicy: 'no-cache' 获取数据并且没有问题,但是,我需要缓存它以进行优化。我还尝试了阿波罗客户端文档中所述的其他获取策略。
我想用mocha,jsdom chai和酶进行单元测试.我已经进行了一些单元测试并且运行良好.
但是,连接到apollo存储的组件不起作用...我有一个错误.
这是一个连接到apollo商店的组件的测试:
import React from 'react';
import { expect } from 'chai';
import { shallow } from 'enzyme';
import sinon from 'sinon';
import ReviewList from '../../src/components/tibco/review-list/review-list';
import NewReview from '../../src/components/tibco/review-list/new-review';
const data = {
loading: false,
allCodeReviews: {
edges: {
node: {
id: "Q29kZVJldmlld05vZGU6MQ==",
reference: 4545,
reviewer: "John",
revisionDate: "2016-11-25",
redmineUrl: "http://url.4545.com",
flow: {
id: "Rmxvd05vZGU6MQ==",
name: "foo"
}
}
}
},
allUsers: {
edges: {
node: {
username: "John"
}
}
},
allFlows: …Run Code Online (Sandbox Code Playgroud) 我正面临着以我想要的格式将数据导入组件的困难.
我的数据来自:
对于我的组件,它不是一种非常有用的格式.我希望数据被id键为suc:
assets: {
"2a4a34sdf3dd": {
//asset data
}
}
Run Code Online (Sandbox Code Playgroud)
我的查询是:
const query = gql`{
assets {
body
id
}
}`
Run Code Online (Sandbox Code Playgroud)
我这样连接我的组件:
export default compose(
graphql(query),
connect(mapStateToProps, mapDispatchToProps)
)(AssetList);
Run Code Online (Sandbox Code Playgroud)
有关如何格式化我的graphql服务器返回的商店数据的任何见解?
内部渲染:
console.log('render', User.length, loading, networkStatus)
Run Code Online (Sandbox Code Playgroud)
当我打电话data.fetchMore两次时,我得到:
render 100 false 7
render 200 false 7
render 300 false 7
Run Code Online (Sandbox Code Playgroud)
而我期望:
render 100 false 7
render 100 true 1
render 200 false 7
render 200 true 1
render 300 false 7
Run Code Online (Sandbox Code Playgroud)
loading在此示例中,它按预期方式工作(变为true):
https://github.com/zeit/next.js/tree/v3-beta/examples/with-apollo
但不在我的代码中:
https://out-bkathectgx.now.sh/
https://github.com/lorensr/graphql-leaderboard/tree/a331af803b36ee2d65c85795d747e6cf4c83ba27
文件:
使用REST-API,我们可以进行获取查询,而不是对服务器进行查询。我使用“ Apollo-client”,但是我想创建查询而不将查询连接到组件。我可以做吗?可能我应该使用方法client.query(http://dev.apollodata.com/core/apollo-client-api.html#ApolloClient.query)和client.mutate或类似的方法?
在突变后编写查询以存储时,我收到错误.突变起作用,我能够读取突变后的查询.当我将相同的查询写入商店缓存时,我得到以下错误:
index.js:2178 Error: Error writing result to store for query:
query ($applicationId: Int) {
vApplicationApprovalChainList(ApplicationId: $applicationId) {
id
approvalOrder
approverId
name
applicationId
__typename
}
}
Cannot read property 'vApplicationApprovalChainList' of undefined
at writeToStore.js:101
at Array.forEach (<anonymous>)
at writeSelectionSetToStore (writeToStore.js:97)
at writeResultToStore (writeToStore.js:75)
at InMemoryCache../node_modules/apollo-cache-inmemory/lib/inMemoryCache.js.InMemoryCache.write (inMemoryCache.js:99)
Run Code Online (Sandbox Code Playgroud)
这是我的代码..突变和store.readQuery工作,但store.writeQuery给出了上述错误.提前感谢您的任何反馈.
APPROVERSLIST_QUERY = gql`
query ($applicationId:Int){
vApplicationApprovalChainList(ApplicationId:$applicationId){
id
approvalOrder
approverId
name
applicationId
}
}
`;
handleClick() {
const { row, mutate} = this.props;
mutate({
variables: {
id: row.id
},
update: (store, …Run Code Online (Sandbox Code Playgroud) react-apollo ×10
apollo ×7
graphql ×6
reactjs ×3
javascript ×1
jsdom ×1
mocha.js ×1
react-redux ×1
rest ×1