React relay+router не сворачивает запросы вложенных маршрутов

Я прочитал на react-router-relay, что:

react-router-relay автоматически сгенерирует комбинированный маршрут Relay со всеми запросами и параметрами из активных маршрутов React Router, а затем передаст результаты запроса каждому из компонентов маршрута. Поскольку все запросы собираются на одном маршруте, все они будут получены одновременно, а данные для всей вашей страницы будут загружаться, а затем отображаться за один раз.

Но в моем приложении я вижу два отдельных вызова /graphql. Вот мой код:

<Route path="site_:siteId" component={AppSkeleton} queries={SiteAccountQueries}>
    <Route path="mySites" component={Sites} queries={SiteAccountQueries} />
</Route>

Первый вызов извлекает данные для AppSkeleton, а второй — для Sites. Разве не предполагалось свернуть их все в один вызов? Что я делаю не так?


person Stefano Masini    schedule 21.01.2016    source источник


Ответы (1)


В документации не сказано, что они объединяются в один вызов. Ваши запросы объединяются в единый маршрут, и все запросы выполняются одновременно, но сопоставление запроса с сетевым запросом относится к сетевому уровню.

На самом деле это тот случай, когда сетевой уровень ретрансляции по умолчанию выдает отдельный HTTP-запрос для каждого запроса на заданном маршруте; это произойдет независимо от того, используете ли вы react-router-relay или у вас просто есть маршрут с более чем одним запросом.

person taion    schedule 21.01.2016
comment
Спасибо, это имеет смысл. Я считаю, что есть открытый запрос функции, чтобы сетевой уровень был достаточно умным для агрегирования различных запросов, верно? - person Stefano Masini; 21.01.2016
comment
Я не уверен, есть ли для этого запрос на функцию, но можно было бы создать собственный сетевой уровень для пакетной обработки. (На самом деле, в Facebook наша внутренняя конечная точка GraphQL имеет пакетную конечную точку, на которую мы можем отправить кучу запросов в одном запросе и получить результаты обратно в одном запросе.) Однако любая реализация будет очень специфичной для бэкэнда, потому что Спецификация GraphQL в настоящее время не предъявляет никаких требований к тому, как должны передаваться запросы. - person wincent; 22.01.2016