Опробовал эстафету с реакцией и столкнулся с этим сегодня. Вот что я сделал до сих пор.
Root Query:
query {
tasks {
id
taskName
taskStatus
userId
}
}
Реагировать на иерархию компонентов
App
↳--TaskList (props: tasks)
↳--TaskListItem (props: task)
Теперь, благодаря принципу колокейшн, я знаю, что должен написать фрагменты в каждом компоненте, чтобы описать свои потребности в данных.
TaskListItem.js
const TaskListItemContainer = createFragmentContainer(
TaskListItem,
graphql`
fragment TaskListItem_task on task {
id
taskName
taskDone
authorId
}
`
);
TaskList.js
const TaskListContainer = createFragmentContainer(
TaskList,
graphql`
fragment TaskList_tasks on task {
tasks {
...TaskListItem_task
}
}
`
);
App.js
<QueryRenderer
environment={relayEnvironment}
query={graphql`
query AppQuery {
...TaskList_tasks
}
`
}
Когда я запускаю релейный компилятор, я получаю следующую ошибку.
Fragment "TaskList_tasks" cannot be spread here as objects of type "Query" can never be of type "task".
App.js (3:15)
2: query AppQuery {
3: ...TaskList_tasks
^
4: }
Не удалось понять, как организовать структуру из-за этой проблемы. Должен ли я изменить схему просто для упрощения структуры и повторного использования фрагментов на стороне клиента?