🔥

Тред (Александр Богачёв)


@jsunderhood Расскажи про DataLoader'ы, пожалуйста.
Да. Даталоадеры — очень полезная штука, особенно в GraphQL. Я к сожалению не смогу рассказать про кишки, но расскажу как мы её используем и как я понимаю её работу в этом контексте. Если кому интересно, в документации есть подробнее npmjs.com/package/datalo… twitter.com/burivuh/status…

Допустим ваш бэкенд имеет ручку getUsers у которой есть параметр userIds, который является массивом айдишников для запроса. Если вы например выводите список комментариев и запрашиваете автора по его ID, у вас будет столько запросов за пользователями, сколько комментариев

Логично было бы запросить комментарии, взять уникальные ID пользователей из них, и запросить один раз этих пользователей с тем самым фильтром userIds. Примерно этим и занимается даталоадер

Вам сначала нужно написать его используя библиотеку выше. Код довольно простой. Мы создаём DataLoader, который принимает функцию с массивом id пользователей, делает запрос в наш бэкенд с фильтром по этим id, дальше возвращаем их в том порядке, в котором мы запросили (это важно)
notion image

Дальше, каждый раз, когда нам нужно запросить пользователей из бэкенда, мы не идём туда напрямую, а делаем так. В итоге, при запросе, все эти ID накопятся и выполнится один запрос за пользователями и намапятся на наши сущности
notion image