2016-11-15 6 views
0

これは、突然変異の入力が並べ替えられた配列の項目の並べ替えが可能で、突然変異の結果がデータベースに保存された後の新しい注文の写真のリストです。実際の突然変異は素晴らしいですが、アレイのoptimisticResponseがどうなっているのか分かりません。 @stubailoへ配列結果に対してoptimisticResponseはどのように見えますか?


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, 
       }, 
      }); 
      }, 
     }, 
     }), 
    }), 
    }), 
+0

楽観的な更新は本当の結果のように見えるはずです。実際の突然変異の結果はうまくいっていますが、楽観的なものではないと言っていますか? – stubailo

答えて

0

ありがとう:

楽観更新が正確に実際の結果たいものです。

私は、オプティミスティックアップデートには当てはまらない追加のロジックをサーバーで行っていました。私がしたとき、それは働いた:

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, 
       }, 
      }); 
      }, 
     }, 
     }), 
    }), 
    }), 
関連する問題