Ошибка запросов подмаршрута для реакции-маршрутизатора-реле

Часть моего маршрута настроена так:

<Route path=":widgetId" component={Widget} queries={{
    viewer: () => Relay.QL`query { viewer }`,
    widget: () => Relay.QL`query { widget(widgetId: $widgetId) }`
}}>
    <Route
        path="details"
        component={Details}
        queries={{ widget: () => Relay.QL`query { widget(widgetId: $widgetId) }` }}
    />
</Route>

Однако я получаю следующую ошибку:

Error:  Invariant Violation: Relay(Details).getFragment(): `viewer` is not a valid fragment name. Available fragments names: `widget``.

Действительны ли запросы для маршрута :widgetId? Если я удаляю средство просмотра с маршрута верхнего уровня, все работает.

РЕДАКТИРОВАТЬ: вот фрагмент деталей:

export default Relay.createContainer(Details, {
    fragments: {
        widget: () => Relay.QL`
            fragment on Widget {
                id,
            }
        `
    }
});

Изменить: вот фрагменты виджета:

export default Relay.createContainer(Details, {
    fragments: {
        widget: () => Relay.QL`
            fragment on Widget {
                id,
            }
        `
        viewer: () => Relay.QL`
            fragment on Viewer {
                id,
            }
        `
    }
});

Примечание. Я использую изоморфный релейный маршрутизатор.


person jouerai    schedule 06.06.2016    source источник
comment
Вы определили фрагмент viewer в контейнере Widget Relay?   -  person Ahmad Ferdous    schedule 06.06.2016
comment
@AhmadFerdous да, средство просмотра фрагментов находится в моем контейнере Widget Relay. Если я возьму маршрут с «подробностями» пути, я не выдам ошибку. Итак, я считаю, что ошибка возникает из-за того, как настроены запросы?   -  person jouerai    schedule 06.06.2016
comment
Invariant Violation: Relay(Details).getFragment() ‹== похоже проблема связана с компонентом Details. Можете ли вы добавить fragments контейнера реле Details?   -  person Ahmad Ferdous    schedule 07.06.2016
comment
@AhmadFerdous я добавил фрагмент деталей   -  person jouerai    schedule 07.06.2016
comment
Повезло ли вам в итоге? Я столкнулся с почти идентичной проблемой с ретранслятором реакции-маршрутизатора.   -  person Tim Hope    schedule 07.12.2016


Ответы (1)


Похоже, вам нужно добавить фрагмент просмотра в ваш класс Widget, то есть:

export default Relay.createContainer(Widget, {
  fragments: {
    widget: () => Relay.QL`
      fragment on Widget {
        id,
      }
    `,
    viewer: () => Relay.QL`
      fragment on ObjectType {
        fields
      }
    `
  }
});
person Jamie S    schedule 08.06.2016
comment
Привет @Jamie S, если вы прочитаете комментарии выше, вы увидите, что у меня есть фрагмент средства просмотра в моем классе виджетов. Ошибка также указывает на то, что viewer не является допустимым именем фрагмента в классе Detail. - person jouerai; 09.06.2016
comment
Я сделал ошибку в своем ответе, который, как я заметил, есть и в вашем обновленном вопросе. Не уверен, что это ошибка копирования и вставки, но в коде виджета вы используете класс Details. В противном случае я не вижу проблемы в опубликованном вами коде. Это почти идентично тому, как я настроил свои маршруты с помощью react-router-relay. - person Jamie S; 09.06.2016