在服务器上,我建立了一个架构,在其中使用了输入类型来获得传递对象数组的能力。我已经在几个地方做到了,但这是迄今为止最简单的一个:
export default gql`
input SkillInput{
skill: String!
}
extend type Mutation {
createSkill(input: [SkillInput]): [Skill]!
}
type Skill {
id: ID!
skill: String!
created_at: DateTime!
}
`;
在前端,我能够使用上述对象数组执行变异。当我尝试纳入乐观回应时,问题就来了。
这是有问题的突变:
this.$apollo
.mutate({
mutation: CREATE_SKILL_MUTATION,
variables: { input: skillArrOfObj },
optimisticResponse: {
__typename: "Mutation",
createSkill: skillArrOfObj.map(entry => ({
__typename: "Skill",
id: -1,
skill: entry.skill
}))
},
update: (store, { data: { createSkill } }) => {
const data = store.readQuery({
query: SKILLS_QUERY
});
console.log(createSkill);
data.skills.push(...createSkill);
store.writeQuery({
query: SKILLS_QUERY,
data
});
}
})
我试图在skillArrOfObj的每个条目中添加__typename和id,但是突变失败。
要提及的另一件事是,更新运行两次,并且createSkill上的日志在更新时产生两个不同的结果:
首次运行
{__typename: "Skill", id: -1, skillObj: Array(2)}
id: -1
skillObj: (2) [{…}, {…}]
__typename: "Skill"
第二次运行显示仅包含id和__typename的数组,没有技能属性
数组是否需要特殊的__typename?还是在进行突变之前我需要做的事情?