【发布时间】: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