我正在尝试输入(使用flowtype)我用Relay.createContainer增强的组件。
我通过"react-relay“包研究了types exported,但ReactContainer似乎不支持道具。
我尝试了RelayContainer,ReactClass,React$Component等,最后我能得到的最接近预期的结果是:
// 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;--
// 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:
// 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,但我觉得这不是添加中继属性的方法。
你知道我该如何做到这一点吗?
发布于 2017-06-03 06:24:02
正如@gre指出的,现在中继编译器为片段生成流类型,并将这些类型导出到__generated__子目录中生成的文件中。
通过运行中继编译器生成所述文件
relay-compiler --src ./src --schema ./schema.json
然后,您可以导入现场道具的流类型,如下所示:
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类型
https://stackoverflow.com/questions/39358847
复制相似问题