对象数组的输入类型,因为突变输入使乐观响应变得混乱

时间:2019-07-11 02:32:41

标签: graphql apollo apollo-client apollo-server

在服务器上,我建立了一个架构,在其中使用了输入类型来获得传递对象数组的能力。我已经在几个地方做到了,但这是迄今为止最简单的一个:

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?还是在进行突变之前我需要做的事情?

0 个答案:

没有答案