Apollo 中深度本地状态的 Graphql 查询失败

Posted

技术标签:

【中文标题】Apollo 中深度本地状态的 Graphql 查询失败【英文标题】:Graphql query fails for deep local state in Apollo 【发布时间】:2019-04-16 06:04:37 【问题描述】:

我正在创建一个 apollo react 应用程序。我希望阿波罗管理我当地的州。我想构建我的本地状态,以便并非所有标量值都位于顶层。

这是我的配置:

import React from 'react'
import ReactDOM from 'react-dom'
import ApolloClient from 'apollo-boost'
import gql from 'graphql-tag'
import  InMemoryCache  from 'apollo-cache-inmemory'
import  ApolloProvider, Query  from 'react-apollo'

const defaults = 
    author: null

const resolvers = 
    Query: 
        author() 
            return  id: 1 
        
    

const typedefs = gql(`
    type Query 
        author: Author
    
    type Author 
        id: Int
    
`)
const apolloClient = new ApolloClient(
    clientState: 
        defaults,
        resolvers,
        typedefs
    ,
    cache: new InMemoryCache()
);

ReactDOM.render(
    <ApolloProvider client= apolloClient >
        <Query query= gql` author @client ` >
             ( data ) => console.log(data.author) || null 
        </Query>
    </ApolloProvider>,
    document.getElementById('app')
)

然后这个应用程序记录undefined。即,查询 author @client id 在data.author 中返回undefined

需要注意的是,当我设置作者类型为Int,默认值为1,查询 author @client 时,应用正确记录1

如何使用 Apollo 在我所在的州建立一些结构?

这些是我的相关依赖项:

apollo-cache "^1.1.20"
apollo-cache-inmemory "^1.3.8"
apollo-client "^2.4.5"
apollo-link "^1.0.6"
apollo-link-error "^1.0.3"
apollo-link-http "^1.3.1"
apollo-link-state "^0.4.0"
graphql-tag "^2.4.2"

【问题讨论】:

【参考方案1】:

已解决:

显然我必须以这种方式将__typename: 'Author' 添加到默认作者:

const defaults = 
    author: 
        __typename: 'Author'
    

【讨论】:

以上是关于Apollo 中深度本地状态的 Graphql 查询失败的主要内容,如果未能解决你的问题,请参考以下文章

Apollo 客户端本地状态 - LoggedIn 查询

Apollo GraphQL 本地和全局错误处理

useMutation 不改变本地状态

Apollo Client 3.0 或 Redux 用于本地状态管理?

如何使用 Apollo/GraphQL 使派生状态保持最新?

在 Apollo GraphQL 中跨本地和远程模式的嵌套数组中建模数据的最佳方法?