У меня есть High Order Component , в который я могу передать массив определений запросов graphql.Этот HOC также включает renderComponent от Reaction-Apollo перекомпоновать , чтобы гарантировать, что компонент не рендерится, если запрос graphql все еще выполняется.Проблема, с которой я сталкиваюсь, заключается в том, что, когда я объединяю запросы graphql, он рендерит компонент до завершения второго запроса.Итак, я предполагаю, что первый запрос завершается, а затем переменная props.data.loading
устанавливается на false
, поэтому компонент рендерится.Но второй запрос никогда не заканчивается.Вот мой компонент высокого порядка:
const ErrorComponent = ({ error }) => (
<span>
Something went wrong: {JSON.stringify(error)}
</span>
);
export function asContainer(Component, mapStateToProps, mapDispatchToProps, graphqlQueries = [], lifecycleSpec = {}) {
const renderWhileLoading = () =>
branch(
props => props['data'] && props['data'].loading,
renderComponent(Loader),
);
const renderForError = () =>
branch(
props => props['data'] && props['data'].error,
renderComponent(ErrorComponent),
);
let parts = [connect(mapStateToProps, mapDispatchToProps)];
if (graphqlQueries.length > 0) {
for (let i = 0; i < graphqlQueries.length; i++) {
let g = graphqlQueries[i];
parts.push(graphql(g.query, g.opts))
}
}
parts.push(
lifecycle(lifecycleSpec),
renderWhileLoading(),
renderForError(),
pure
);
return compose(parts)(Component);
}
И, используя шаблон контейнера, этот компонент вызывает этот HOC:
export const AuthedRouterContainer = asContainer(
AuthedRouter,
mapStateToProps,
mapDispatchToProps,
[{
name: "user",
query: LoggedInUserQuery,
opts: {
options: (props) => ({
variables: {
id: props.currentUser.id
}
}),
}
}, {
query: GetEntityProcessesQuery,
opts: {
name: "processes",
options: (props) => ({
variables: {
entityId: props.currentEntity.id
}
}),
skip: (props) => !props.currentEntity
}
}]
);
Мне нужна помощь, чтобы выяснить, почему это не такдождитесь окончания второго запроса, прежде чем визуализировать компонент, передаваемый в HOC.