Обновление нескольких узлов из React Relay Mutation

Скажем, у меня есть модель GraphQL, в которой есть People и Parties.

Что-то вроде этого:

Person {
   name: String
   parties: PartyConnection
}

Party {
   place: String
   dateTime: String
   people: PeopleConnection
}

Я могу посмотреть на Person и увидеть, к чему они идут Parties, что затем кэшируется Relay.

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

Полезная нагрузка мутации выглядит примерно так:

fragment on CreatePartyMutationPayload {
    party
    partyMembers - not sure what type this should be, an array of ids?
}

какая getConfigs и/или структура полезной нагрузки мне нужна, чтобы сообщить Relay, что каждый человек в массиве partyMembers должен сделать свое поле party в кеше недействительным?

Кроме того, возможно, существуют некоторые правила на стороне сервера, согласно которым, если я приглашаю одного человека, его партнер также приглашается автоматически. Это означает, что у меня нет окончательного списка идентификаторов Person, которые будут признаны недействительными в объекте мутации на стороне клиента, пока полезная нагрузка не вернется. Как сделать так, чтобы все участники группы в полезной нагрузке были признаны недействительными?


person Dylan    schedule 22.01.2016    source источник
comment
На самом деле это не ответ на вопрос, но мне удалось найти обходной путь, используя react-relay-router и обеспечив, чтобы измененные данные всегда находились на другом маршруте, а затем включив forceFetch, чтобы реле всегда получало самые последние данные о изменения маршрута.   -  person Dylan    schedule 23.01.2016


Ответы (1)


Может ли человек пойти только на одну вечеринку, или человек может пойти на много вечеринок? Я спрашиваю это, потому что вы используете слово недействительность. Если человек может присутствовать на нескольких вечеринках, я не думаю, что признание недействительным необходимо. Если они могут идти только на одну сторону, вам может потребоваться настроить соединения по мере необходимости.

Вы можете использовать RANGE_ADD для добавления новых соединений между сторонами. Если вы предпочитаете более целенаправленный ручной подход, вы также можете использовать RANGE_ADD, чтобы добавить людей в соответствующие групповые связи. Если вам нужно удалить кого-то из вечеринки, вы можете посмотреть NODE_DELETE. Если вы не совсем знаете, кого или что изменить, но знаете, что что-то изменилось в участниках вечеринки, вы можете применить подход «обновить все» и использовать FIELDS_CHANGE.

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

person Ryan    schedule 29.01.2016
comment
Они могут пойти на несколько вечеринок. В итоге я добавил forceFetch к каждому маршруту URL-адреса (используя relay-react-router), чтобы он всегда обновлялся, потому что логика недействительности была слишком сложной, но изменения видны только на страницах, показанных с другим URL-адресом. - person Dylan; 29.01.2016