【问题标题】:Relay fetchQuery: How to get result of query without fragment structure中继fetchQuery:如何在没有片段结构的情况下获取查询结果
【发布时间】:2026-01-29 08:50:01
【问题描述】:

假设我有一个*查询和一个带有如下片段的子组件:

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

【问题讨论】:

    标签: graphql relayjs relay


    【解决方案1】:

    我确实设法半回答了这个......

    您可以使用Relay 中的@inline 指令来检索未屏蔽的结果。

    这并没有完全解决我的特定用例,因为我希望查询本身保持被屏蔽,但是当我强制调用HomePageQuery 时得到未屏蔽的结果。但如果你没有这个要求,它应该可以工作。

    【讨论】: