【问题标题】:Graphcool Mutation changing fields that are not supose to changeGraphcool Mutation 改变不应该改变的字段
【发布时间】:2019-08-15 18:42:07
【问题描述】:

我在使用 graphcool 和 apollo 客户端进行突变时遇到问题,在我的应用程序中,我有一个软删除类型的功能,用户单击删除,应用程序运行突变以仅更改名为的数据库上的一个字段deletedAt,默认为 null,但是当有一些数据时,它只会进入我应用程序的另一个选项卡。问题是,突变获取单击按钮的当前时间,应用该字段,但将所有其他字段设置为 null,从而在我的应用程序的其余部分引起一堆问题。但是,我不知道问题出在哪里,有人可以帮助我吗?

我在这里调用我的函数

  const handleConfirm = async () => {
    setDeleting(true)

    try {
     await updateEvent({ variables: { id: eventId, deletedAt: moment()}})
      await dataList.refetch()
     sendNotification(t({ id: 'deleted-event'}))
    } catch (err) {
      sendNotification(t({ id: 'failed-delete-event'}), 'error', err)
    }

    setDeleting(false)
    setOpen(false)
  }

这是我的突变

export default graphql(
  gql`
    mutation updateEvent(
      $id: ID!
      $canceled: Boolean
      $offreId: ID
      $vehiclesIds: [ID!]
      $employeesIds: [ID!]
      $deletedAt: DateTime
    ) {
      updateEvent(
        id: $id
        canceled: $canceled
        offreId: $offreId
        vehiclesIds: $vehiclesIds
        employeesIds: $employeesIds
        deletedAt: $deletedAt
      ) {
        id
        canceled
        vehicles {
          id
          name
          plate
        }
        eventStuffs {
          id
          quantity
          stuff {
            id
            name
          }
        }
        deletedAt
        offre {
          id
          showTotalBudgetsPdf
          rev
          version
          name
          maxPersons
          minPersons
          startTime
          endTime
          status
          gmtOffset
          client {
            id
            name
            email
            phone
            address
            clientContacts {
              id
              name
              email
            }
          }
          clientContact {
            id
            name
            email
            mobilePhone
            phoneNumber
          }
          language
          eventType {
            id
            name
          }
          place {
            id
            name
          }
          address
          city
          postalCode
          sectionItems {
            content
            h
            i
            id
            isDraggable
            isResizable
            maxH
            maxW
            minH
            minW
            moved
            static
            type
            w
            x
            y
            menu {
              id
              name
              price
              people
              startDate
              endDate
              hasItemsCold
              hasItemsHot
              hasItemsZHot
              hasItemsZCold
              hasItemsDessert
              kitchenNotes
              comment
              sections {
                id
                name
                showPdf
                itemProposals {
                  id
                  status
                  plats {
                    id
                    platTranslations {
                      id
                      name
                      language
                      description
                      internalDescription
                    }
                  }
                }
              }
            }
          }
          budgetLines {
            id
            description
            quantity
            unitPrice
            value
            total
            tax {
              id
              name
              value
            }
          }
          employeeEstimations {
            id
            estimatedEndAt
            estimatedStartAt
            number
            pricePerHour
            total
            job {
              id
              name
            }
          }
        }
      }
    }
  `,
  {
    name: "updateEvent",
  }
);

【问题讨论】:

    标签: reactjs graphql graphcool


    【解决方案1】:

    尝试在服务中深度克隆来自服务器的响应

    getdatabyTeam(teamID: string): Promise<ITeam[]> {
    return this.apollo.watchQuery<TeamResponse | any>({ variables: { _id: teamID }, query: listTeamID })
      .result()
      .then(response => _.cloneDeep(response.data.listTeamID))
      .catch(err => {
        console.log(err);
        return err;
      });}
    

    通过深度克隆,可以解决这个问题

    【讨论】:

      猜你喜欢
      • 2021-01-08
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 2012-11-24
      相关资源
      最近更新 更多