首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何键入导出的RelayContainer

如何键入导出的RelayContainer
EN

Stack Overflow用户
提问于 2016-09-07 06:43:17
回答 1查看 1.3K关注 0票数 46

我正在尝试输入(使用flowtype)我用Relay.createContainer增强的组件。

我通过"react-relay“包研究了types exported,但ReactContainer似乎不支持道具。

我尝试了RelayContainerReactClassReact$Component等,最后我能得到的最接近预期的结果是:

代码语言:javascript
复制
// Foo.js
// @flow
import React from "react";
import Relay from "react-relay";

type Props = { title: string; }
const Foo({ title }: Props) => (<div>{title}</div>);

const exported: Class<React$Component<void, Props, void>> = Relay.createContainer(Foo, {
  fragments: { ... }
});

export default exported;

--

代码语言:javascript
复制
// Bar.js
// @flow

import React from "react";
import Foo from "./Foo.js";
const Bar = () => <Foo />; 

现在flow将在Props周围的Foo.js中抱怨酒吧没有提供标题道具,这是我想要的(我希望它在Bar.js中抱怨,但这是一个细节)。然而,如果Bar也是一个引用Foo的片段的RelayContainer,那么流会抱怨它在Foo的属性中找不到getFragment

代码语言:javascript
复制
// Bar.js
// @flow

import React from "react";
import Relay from "react-relay";
import Foo from "./Foo.js";

const Bar = () => <Foo />; 

export default Relay.createContainer(Bar, {
  fragments: {
    baz: () => Relay.QL`
      fragment on Baz {
        ${Foo.getFragment("foo")}
      }
    `
  }
}

最后,我尝试输入Relay.createContainer的输出,以便它继续输入装饰组件的类型。我查看了中继的内部类型,看到了https://github.com/facebook/relay/blob/8567b2732d94d75f0eacdce4cc43c3606960a1d9/src/query/RelayFragmentReference.js#L211,但我觉得这不是添加中继属性的方法。

你知道我该如何做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-03 06:24:02

正如@gre指出的,现在中继编译器为片段生成流类型,并将这些类型导出到__generated__子目录中生成的文件中。

通过运行中继编译器生成所述文件

relay-compiler --src ./src --schema ./schema.json

然后,您可以导入现场道具的流类型,如下所示:

代码语言:javascript
复制
import type { MyComponent_myField } from "./__generated__/MyComponent_myField.graphql";
class MyComponent extends Component<{
  myField: MyComponent_myField,
}> {
  render() {
    return <div>Example</div>;
  }
}
export default createFragmentContainer(MyComponent, {
  myField: graphql`
    fragment MyComponent_myField on MyType {
       edges {
          node {
            _id
            foo
          }
       }
    }
  `
});

尽管AFAIK当前没有为散布的片段生成unless you use the Haste module system类型

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39358847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档