Решено!
Я пытаюсь объединить два зависимых запроса GraphQL.
Первый должен получить идентификатор, а второй - этот идентификатор.Я читал, что compose ведет себя как flowRight (), но независимо от того, в каком порядке я размещаю запросы, если queryId ниже queryDetails, то queryDetail всегда пропускается (как и ожидалось).Независимо от того, как я собрал код, переменная не определена.
import { graphql, compose } from 'react-apollo'
import gql from 'graphql-tag'
class Home extends Component {
constructor(props) {
super(props)
console.log("Where's my data?")
console.log(props)
}
render() {
return(
<div />
)
}
}
export const queryIdConst = gql`
query IdQuery {
account(name:"SuperAccount")
{
lists {
edges {
id
}
}
}
}
`
export const queryDataConst = gql`
query DataQuery($id: ID!) {
account(name:"SuperAccount")
{
list(id: $id) {
displayTitle
}
}
}
`
export default compose(
graphql(queryIdConst, {
name: 'listId',
}),
graphql(queryDataConst, {
name: 'data',
skip: ({ listId }) => !listId.data,
options: ({ listId }) => ({
variables: {
id: list.data.account.lists.edges[0].id
}
})
})
)(Home)
Я уже пытался изменить порядок составления функций, но в любом случае это не работает, так как я ожидал, что он будет работать.
Спасибо за любую помощь!
Редактировать: Переключение двух graphql () в compose () для встраивания с Комментарий AbsoluteSith комментарий ссылка
Solution
С советами и подсказками Daniel Rearden и AbsoluteSith Я реализовал следующее решение:
Изменил compose ():
export default compose(
graphql(queryIdConst, {
name: 'listId',
}),
graphql(queryDataConst, {
name: 'dataHome', // changed to 'dataHome' to avoid confusion
skip: ({ listId }) => !listId.account,
options: ({ listId }) => ({
variables: {
id: listId.account.lists.edges[0].id
}
})
})
)(Home)
И мой рендер ():
return(
<div>
{ dataHome && !dataHome.loading &&
<div>{dataHome.account.list.displayTitle}</div>
}
</div>
)