Apollo 客户端片段不嵌入数据

Posted

技术标签:

【中文标题】Apollo 客户端片段不嵌入数据【英文标题】:Apollo client fragments not embedding data 【发布时间】:2020-12-01 08:57:51 【问题描述】:

这是我第一次冒险进入碎片,我看不出我在哪里搞砸了,但它绝对行不通!在 GraphiQL 中它运行良好:

query Tasks($taskIds: [String]!) 
    tasks(taskIds: $taskIds) 
        ...taskDisplay
    

fragment taskDisplay on Task 
    _id
    name
    description
    status
    children 
        _id
    

这是我的客户端应用程序中的内容:

import  gql  from "@apollo/client";

export const TASK_FRAGMENT = gql`
    fragment taskDisplay on Task 
        _id
        name
        description
        status
        children 
            _id
        
    
`;

export const TASKS = gql`
    query Tasks($taskIds: [String]!) 
        tasks(taskIds: $taskIds) 
            ...taskDisplay
        
    
    $TASK_FRAGMENT
`;

因此,服务器返回正确的数据,正如我在 Chrome 的 Network 选项卡中看到的那样,但useQuery 结果接收到的数据是一个空对象。什么给了?

使用@apollo/client@3.2.0-beta.2(我已降级到3.1.0,结果相同)

编辑:

添加更多信息。我的代码与使用钩子一样简单。以下是正在发生的事情:

import  useQuery, gql  from "@apollo/client";
import  TASK_FRAGMENT  from "../pages/task/queries";

const ROOT_TASK_QUERY = gql`
    query Project($projectId: String!) 
        rootTask(projectId: $projectId) 
            ...taskDisplay
        
    
    $TASK_FRAGMENT
`;

const useProject = ( variables ) => 
    return useQuery(ROOT_TASK_QUERY, 
        variables,
    );
;
export default useProject;

这只是记录查询本身:

【问题讨论】:

您返回的数据缺少__typename 字段,这可能是原因吗? 天哪,太棒了。我在学习 Apollo 时关闭了它,因为我没有看到它对我正在做的事情有用。那正是它的样子。 const cache = new InMemoryCache( addTypename: false ); 把它作为答案发布,我会标记它! 我很高兴,会做的 【参考方案1】:

您返回的数据缺少__typename 字段

【讨论】:

1.5 年后,你也解决了我的问题!非常感谢 也是 1.5 年后,你解决了我的问题!谢谢! 也可能是你在 Apollo 选项中设置了addTypenamefalse

以上是关于Apollo 客户端片段不嵌入数据的主要内容,如果未能解决你的问题,请参考以下文章

如何为 apollo 客户端生成片段类型?

将 GraphQL 片段与 Apollo Hooks 一起使用时出错

@apollo/client 反应钩子 useQuery() 数据未定义

Apollo 客户端 useQuery 在 useMutation 后不更新数据

Apollo 客户端持久缓存不起作用

使用 Apollo 链路状态缓存实现客户端过滤