Подтвердить что ты не робот

Как напечатать экспортированный RelayContainer

Я пытаюсь ввести (с потоком) компоненты, которые я улучшаю с помощью Relay.createContainer.

Я просмотрел типы, экспортированные пакетом "реакция-реле", но 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 />; 

Теперь поток будет жаловаться на Foo.js вокруг Опоры, что в баре не указан заголовок, какой я хочу (я бы хотел, чтобы он жаловался на Bar.js, но он подробно). Однако, если Bar был также RelayContainer ссылкой на поток фрагмента Foo, он жаловался бы, что он не может найти getFragment в свойствах Foo:

// 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, но я чувствую, что это не способ добавить свойства Relay.

Любая идея, как я могу достичь этого?

4b9b3361

Ответ 1

как указывал @gre, теперь ретранслятор компилятора генерирует типы потоков для этого фрагмента, и они экспортируются в сгенерированные файлы в подкаталоге __generated__.

генерирование указанного файла путем запуска релейного компилятора

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

Затем вы импортируете типы потоков для реквизита поля следующим образом:

import type { MyComponent_myField } from "./__generated__/MyComponent_myField.graphql";
class MyComponent extends Component {
  props: {
    myField: MyComponent_myField,
  }

  render() {
    return <div>Example</div>;
  }
}
export default createFragmentContainer(MyComponent, {
  myField: graphql`
    fragment MyComponent_myField on MyType {
       edges {
          node {
            _id
            foo
          }
       }
    }
  `
});