Relay fetchQuery: как получить результат запроса без структуры фрагмента

Допустим, у меня есть запрос верхнего уровня и подкомпонент со следующим фрагментом:

export const HomePageQuery = graphql`
    query HomePageQuery {
        viewer {
            ...SubComponent_viewer
        }
    }
`

// then a sub-component with
const SubComponentWithFragment = createFragmentContainer(SubComponent, {
    viewer: graphql`
        fragment SubComponent_viewer on Viewer {
            me {
                someImportantValue
            }
        }
    `
})

Я хочу обязательно вызвать HomePageQuery, а затем, как только получу результат, сделать что-нибудь с someImportantValue.

Итак, я попробовал это:

// This is a Relay Environment using react-relay-network-modern w/ some middleware
// can give implementation details if required but didn't think necessary
import relayEnv from 'Relay/createRelayEnvironment'

const data = await fetchQuery(relayEnv.environment, HomePageQuery, {})
console.log(data)

Затем это возвращает мне результат, но все же разбитый на фрагменты. например

{ viewer:
   {
    __fragments: {SubComponent_viewer: {…}}
    }
}

Есть ли способ получить ответ от этого, как вы найдете в graphiQL? например

{
  viewer: {
    me: {
       someImportantValue: 39
    }
  }
}

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

Является ли мой единственный вариант получить его из местного магазина после этого?

В настоящее время используется Relay v7


person MDalt    schedule 14.10.2020    source источник


Ответы (1)


Мне удалось частично ответить на этот вопрос...

Вы можете использовать директиву @inline в Relay, чтобы получить незамаскированный результат.

Это не вполне решило мой конкретный вариант использования, так как я хочу, чтобы сам запрос оставался замаскированным, но при императивном вызове HomePageQuery получал немаскированный результат. Но если у вас нет этого требования, оно должно работать.

person MDalt    schedule 22.10.2020