【问题标题】:Apollo client fragments not embedding dataApollo 客户端片段不嵌入数据
【发布时间】: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 });
  • 把它作为答案发布,我会标记它!
  • 我很高兴,会做的

标签: graphql apollo-client


【解决方案1】:

您返回的数据缺少__typename 字段

【讨论】:

  • 1.5 年后,你也解决了我的问题!非常感谢
  • 也是 1.5 年后,你解决了我的问题!谢谢!
  • 也可能是你在 Apollo 选项中设置了addTypenamefalse
猜你喜欢
  • 2023-03-19
  • 2020-01-19
  • 2019-07-29
  • 2018-02-11
  • 2019-03-24
  • 2020-06-04
  • 2018-01-09
  • 2018-06-28
  • 2020-02-03
相关资源
最近更新 更多