2016-05-17 3 views
1

Возможно ли повторное использование мутации?Повторное использование мутации в реле

Предположим, существует мутация UpdateItemMutation, которой я передаю реквизиты, , но иногда я просто хочу обновить определенный атрибут.

т.е. я хочу быть в состоянии сделать:

UpdateItemMutation({prop1: 'Data', prop2: 'Data2'}) 
UpdateItemMutation({prop1: 'Data'}) 
UpdateItemMutation({prop2: 'Data2'}) 

К сожалению, мой оптимизм конфигурации жалуется, так как я передаю неопределенный к нему.

Кроме того, поскольку я должен учитывать, что мутация обновляет все, это будет повторно запрашивать все это, в идеале обновление «prop1» будет делать только fatQuery для «prop1».

Использование @include, если определено значение prop здесь, похоже, не работает.

+0

Можете ли вы опубликовать свой код мутации, а также ошибку, которую вы получаете? – Chris

ответ

1

В настоящее время нет прямого способа, хотя есть обходной путь, это тоже, если вы не возражаете, чтобы получить весь предмет в ответ на мутацию.

Как вы хотите обновить переменное количество атрибутов элемента, вы можете написать мутацию (серверную), которая принимает список атрибутов и список значений.

// Using `graphql-relay` library's helper function `mutationWithClientMutationId`. 
const UpdateItemMutation = mutationWithClientMutationId({ 
    name: 'UpdateItem', 
    inputFields: { 
    itemId: { type: new GraphQLNonNull(GraphQLID) } 
    properties: { type: new GraphQLList(GraphQLString) }, 
    values: { type: new GraphQLList(GraphQLString) }, 
    }, 
    outputFields: { 
    item: { 
     type: ItemType, 
     resolve: (item) => item, 
    }, 
    }, 
    mutateAndGetPayload: ({itemId, properties, values, ...args}) => { 
    // Iterate over the properties and values. 
    // Update the item with itemId. 

    return item; 
    }, 
}); 

стороны клиента мутация вызывается, как показано ниже:

Relay.Store.commitUpdate(new UpdateItemMutation({ 
    item: this.props.item, 
    properties: ['prop1', 'prop2'], 
    values: ['value1', 'value2'], 
})); 

Что касается оптимистического обновления в стороне клиента мутации, вы можете обработать возвращаемое значение из properties и values т.е. обновленных атрибутов и их значения.

Насколько я знаю, в том числе и в условных выражениях в жирном запросе не поддерживается Relay на данный момент. В отличие от контейнера Relay, мы не можем использовать переменные в жирном запросе. Видя current efforts by Relay contributors, я считаю, что в ближайшем будущем API-интерфейсы мутаций будут намного более мощными, но оптимизированными.

Смежные вопросы