【问题标题】:Flow type relay's createFragmentContainer流式中继的createFragmentContainer
【发布时间】:2019-04-16 05:05:48
【问题描述】:

我几乎不知道如何流动类型中继的现代 createFragmentContainer。

我知道了:

import { type RelayContext } from 'react-relay'

type Props = {
  relay: RelayContext
}

relay 是容器添加的道具。

组件以这种方式导出:

export default createFragmentContainer(
  Foo,
  graphql`
    fragment Foo_session on Session {
      foo {
        id
      }
    }
  `
)

当我在其他一些组件中使用这个组件时(例如像这样<Foo session={session} />),我会得到这个错误:

Flow: Cannot create 'Foo' element because property 'relay' is missing in props [1] but exists in 'Props' [2]

【问题讨论】:

    标签: reactjs types flowtype relaymodern


    【解决方案1】:

    @Boris 您的片段容器上没有relay 属性,只有在父级上,这是您将传播此查询的地方。在那里,您将拥有 relay 属性并输入它。

    对于Foo 组件,您可以键入传入的数据,这些数据将从父级传递。例如:

    export default createFragmentContainer(
      Foo,
      session: graphql`
        fragment Foo_session on Session {
          foo {
            id
          }
        }
      `
    )
    

    您有一个带有已编译查询的__generated__ 文件夹,对吗?所以你可以:

    import type { Foo_session } from './__generated__/Foo_session.graphql';
    
    type Props = {
      session: Foo_session
    }
    

    希望对你有帮助:)。

    【讨论】:

    • 谢谢,但我实际上在这个片段中使用了中继道具,因为我需要在这个组件中调用突变(this.props.relay.environment)。我只是不知道如何教流程,中继道具是由createFragmentContainer 添加的,而不是由父级传递的
    • @Boris,不确定我是否明白了,但您不需要将 relay 传递给子组件来调用突变。您可以只导入突变并运行它。不管怎样,你确定你通过了吗?因为错误消息不是关于输入错误,而是道具根本不存在。
    • 我知道我不需要它从父级传递,因为 createFragmentContainer 正在将该道具添加到组件中。但是当我在组件的 props 中定义它时,flow 期望我将它从他的父组件传递给该组件。我只是不知道如何流式输入:facebook.github.io/relay/docs/en/…“由 createFragmentContainer 产生的组件将收到以下道具”
    猜你喜欢
    • 2017-12-06
    • 2020-08-22
    • 2018-01-29
    • 2010-12-11
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多