Фактическое имя свойства на REQUIRED_CHILDREN connetion

В реле, при использовании REQUIRED_CHILDRENкак так:

   return [{
      type: 'REQUIRED_CHILDREN',
      children: [
        Relay.QL`
          fragment on Payload {
            myConnection (first: 50) {
              edges {
                node {
                  ${fragment}
                }
              }
            }
          }
        `
      ]
    }]

и считывание ответа через onSuccessобратный вызов:

Relay.Store.commitUpdate(
  new AboveMutation({  }), { onFailure, onSuccess }
)

ответ превращает свойство myConnectionв хэшированное имя (т. е. __myConnection652K), которое предположительно используется для предотвращения конфликтов соединения/списка внутри хранилища ретрансляции.

Однако, так как это REQUIRED_CHILDREN, и я вручную читаюmyConnection, это просто предотвращает доступ к нему.

Существует ли способ получить фактические имена свойств при использовании обратного вызова onSuccess?

1 ответ

  1. Так же, как Ахмад написал: использование REQUIRED_CHILDRENозначает, что вы не собираетесь хранить результаты. Следствием этого является то, что данные, поставляемые в обратный вызов, находятся в необработанной форме (почти так же, как это пришло с сервера), и маскировка данных не применяется.

    Несмотря на то, что данные не хранятся, это, кажется, не причина (хотя мнение основного члена команды было бы, безусловно, более уместным здесь), чтобы не преобразовать его в клиентскую форму стиля. Это новейший тип мутации, поэтому есть вероятность, что такая особенность была случайно опущена. Обычно запросы преобразуются в стиль сервера форма, обратное преобразование может иметь место, а также. Однако до сих пор это было не нужно — при сохранении данных в хранилище и обновлении реквизитов компонентов, преобразование было сделано между тем. В настоящее время большая часть команды Relay сильно сосредоточена на переписывании большей части реализации, поэтому я не ожидаю, что эта проблема будет улучшена очень скоро.

    Таким образом, решение, предложенное Ахмедом для преобразования типа ВGraphQLList, кажется, самым простым и надежным . Если по какой-либо причине вы хотите сохранить соединение, есть возможность взять GraphQL fragmentпредоставленный as children(фактически его анализируемую форму, хранящуюся в __cachedFragment__атрибуте этого исходного фрагмента) и пересечь его, чтобы получить serializationKeyнужное поле (например __myConnection652K).