中继fetchQuery:如何在没有片段结构的情况下获取查询结果

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于中继fetchQuery:如何在没有片段结构的情况下获取查询结果的主要内容,如果未能解决你的问题,请参考以下文章

水合没有查询的中继片段

没有数据的中继容器

如何从一组中继容器中组合片段?

中继片段变量

嵌套片段数据在中继中始终相同

中继片段传播不起作用