1

これは、ミューテーション入力が並べ替えられた配列であるアイテムを並べ替えることができるリスト用であり、ミューテーション結果は、データベースに保存された後の新しい順序の写真のリストです。optimisticResponse実際の突然変異はうまく機能しますが、配列の for がどのように見えるべきかはわかりません。


input InputItemOrder {
  key: String
  order: Int
  ref: InputPhoto
}

input InputPhoto {
  public_id: String
  secure_url: String
}

type Mutation {
  orderMyPhotos(itemOrder: [InputItemOrder]): [Photo]
}

type Photo {
  public_id: String
  secure_url: String
  order: Int
}

const ORDER_MY_PHOTOS_MUTATION = gql`
mutation OrderMyPhotos($itemOrder: [InputItemOrder]) {
  orderMyPhotos(itemOrder: $itemOrder) {
    public_id
    secure_url
    order
  }
}
`;

  graphql(ORDER_MY_PHOTOS_MUTATION, {
    props: ({ ownProps, mutate }) => ({
      order: (itemOrder) => mutate({
        variables: { itemOrder },
        optimisticResponse: {
          __typename: 'Mutation',
          orderMyPhotos: itemOrder.map(i => ({
            __typename: 'Photo',
            public_id: i.ref.public_id,
            secure_url: i.ref.secure_url,
            order: i.order,
          })),
        },
        updateQueries: {
          MyPhotos: (prev, { mutationResult }) => {
            const orderedPhotos = mutationResult.data.orderMyPhotos;
            return update(prev, {
              userPhotos: {
                $set: orderedPhotos,
              },
            });
          },
        },
      }),
    }),
  }),
4

1 に答える 1

0

@stubailo に感謝:

楽観的な更新は、実際の結果とまったく同じになるはずです。

サーバー上で追加のロジックを実行していたことがわかりましたが、これは楽観的な更新には適用されませんでした。私がやったとき、それはうまくいきました:

  graphql(ORDER_MY_PHOTOS_MUTATION, {
    props: ({ ownProps, mutate }) => ({
      order: (itemOrder) => mutate({
        variables: { itemOrder },
          optimisticResponse: {
            __typename: 'Mutation',
            orderMyPhotos: _.sortBy(itemOrder.filter(i => _.isNumber(i.order)).map(j => ({
              __typename: 'Photo',
              order: j.order,
              public_id: j.ref.public_id,
              secure_url: j.ref.secure_url,
            })), 'order')
          },
        updateQueries: {
          MyPhotos: (prev, { mutationResult }) => {
            return update(prev, {
              userPhotos: {
                $set: mutationResult.data.orderMyPhotos,
              },
            });
          },
        },
      }),
    }),
  }),
于 2016-11-16T06:40:14.823 に答える