Рендеринг запросов в React Native с Relay и GraphQL на Back4App
В нашем предыдущем руководстве, мы узнали, как подготовить нашу среду Relay. Теперь вы готовы начать разработку вашего приложения на React Native.
В этом руководстве вы узнаете, как сделать ваш первый запрос на Back4App. Мы погрузимся в рендерер запросов Relay, поймем его основные принципы и используем его для получения ваших первых данных из Back4App.
Получить обзор рендерера запросов Relay;
Сделать запрос к Back4App GraphQL API из приложения React Native с использованием Relay;
- Приложение создано на панели управления Back4App
- Приложение React Native с настроенной средой Relay согласно предыдущим документам.
- Прочитайте о узлах Relay и соединениях
Так же, как React строит дерево компонентов, Relay строит дерево компонентов данных. Это означает, что каждый компонент приложения будет владельцем своих фрагментов данных. Фрагмент будет содержать информацию о данных, необходимую для его отображения на экране, и Relay гарантирует, что эти данные доступны перед рендерингом компонента.
Управляя этим подходом, рендерер запросов является корневым компонентом, необходимым для составления этих фрагментов и подготовки запроса для получения из нашего бэкенда.
Понимание использования рендерера запросов важно для абстрагирования вашего приложения различными способами. Хорошая абстракция кода может предотвратить часы работы, ошибки, время отладки и т.д.
В последнем уроке мы подготовили файл окружения Relay, который указывает информацию о подключении к Back4App. Используя эту конфигурацию, Relay будет заботиться о взаимодействии с API Back4App. Вам не нужно беспокоиться о подключении. Просто сосредоточьтесь на создании компонентов данных.
Давайте создадим ваш первый класс и заполним его несколькими объектами, используя консоль GraphQL Back4App. Класс Person имеет 2 поля: name, которое является строкой, и salary, которое является целым числом. Перейдите в Панель управления->Core->Консоль GraphQL и используйте код ниже:
Вы увидите результат ниже:
- создание класса
Теперь давайте создадим несколько объектов внутри этого класса. Перейдите к мутации создания объекта руководство, чтобы увидеть, как обработать этот случай. Убедитесь, что вы используете последнюю версию Parse Server, чтобы использовать наиболее актуальную нотацию GraphQL API, доступную на Back4App.
- создание объекта
Теперь класс Person создан и имеет поля имя и зарплата.
После создания нового класса Back4App автоматически генерирует все необходимые ресурсы для безопасного использования бэкенда.
Одним из примеров является список объектов. Back4App уже создал необходимые соединения для запроса списка Person: People.
Чтобы лучше понять, перейдите на площадку, обновите страницу и откройте вкладку документации, затем найдите People. Back4App сгенерировал поле соединения. Вы также можете запрашивать класс person как список. Обратите внимание, что поле Query.people является PersonConnection.
Relay будет использовать поле соединения для отображения списка объектов Person.
Документация по полю Person:
И документация по полю соединения People (Person):
Важно помнить, что если в ваше приложение добавляется новый класс, необходимо обновить схему внутри корня приложения React Native.
При необходимости перейдите в Скачать схему документацию и повторите шаги для обновления схемы.
Прежде чем продолжить учебник, давайте познакомим вас с контейнером фрагмента.
Давайте создадим компонент, который будет владельцем информации о Person. Этот компонент будет содержать имя и зарплату человека. Здесь вы можете запросить любое поле person для создания вашего компонента. Теперь мы собираемся продолжить с этими двумя полями.
- Создайте файл и назовите его PersonCard.js
- внутри него давайте создадим простой функциональный компонент
Замените строку export default на код ниже:
Код выше создаст фрагмент Person, который запрашивает только id, имя и зарплату.
Завершите обновление остальной части компонента следующим кодом:
Конечный результат должен выглядеть так:
Следующий шаг - создать рендерер запроса для вашего списка объектов. Рендерер запроса - это корневой компонент для получения данных компонентов и подготовки их для извлечения данных из бэкенда. Вы узнаете, как извлекать данные для класса Person на Back4App.
- Создайте новый файл и назовите его PersonRenderer.js
- Скопируйте код ниже и вставьте его в файл PersonRenderer.
Давайте начнем с Query Renderer с пустыми свойствами: graphql, variables и render. Шаг за шагом вы будете реализовывать каждое из них поэтапно.
Прежде всего, ваше приложение должно указать запрос для Query Renderer. Здесь наше приложение будет использовать список людей. В свойствах запроса вставьте следующий код:
graphql поступает из react-relay и реализует запрос в виде строки.
Важно понимать связи между edges и node. Запрос выше использует соединение узлов людей с сервера Back4App. Каждый раз, когда вы создаете новый класс, за ним будет следовать соединение узлов.
Переменные
При необходимости рендерер запросов будет использовать переменные. Хороший пример: когда приложение запрашивает запрос для человека по id. Поскольку это не так в данный момент, давайте передадим null в свойства переменных.
Заполнение карточки человека
Этот запрос вернет список людей. Рендерер запросов гарантирует, что данные будут доступны для рендеринга. Если это не так, будет выдана ошибка. Свойства, ответственные за это, - это render.
Заполните свойства рендеринга следующим кодом:
Замените закомментированный todo на javascript map для рендеринга карточки человека для каждого результата из списка.
Как уже было сказано, рендерер запросов берет на себя ответственность за то, чтобы данные были доступны только тогда, когда они готовы. До тех пор будет отображаться сообщение о загрузке. Если произойдет ошибка, она будет отображена на экране, предотвращая неожиданное завершение работы приложения.
Наконец, давайте улучшим рендеринг людей, заменив .map на новую функцию. Поместите её перед Query Renderer:
И конечный результат должен выглядеть так:
Теперь пришло время получить данные о человеке, используя PersonRenderer. Если всё в порядке, ваше приложение теперь имеет два новых компонента: PersonRenderer и PersonCard.
Перед запуском приложения Relay нуждается в Relay Compiler для выполнения и генерации типов компонентов. Для этого выполните в вашем терминале:
В app.js добавьте следующий код:
Код app.js изначально взят из create-react-native-app. Он добавил View с стилем для центрирования содержимого на экране с отступом 10px сверху. Внутри него есть текст с меткой, чтобы дать некоторый контекст для вывода, и PersonRenderer для отображения списка людей.
Вам нужно получить следующий результат:
- Рендеринг
В нашем приложении Back4App React Native мы импортируем PersonRenderer непосредственно в App.js. Поскольку PersonRenderer является корневым компонентом и имеет свой QueryRenderer, Person должен отображаться без каких-либо ошибок:
Этот шаг имеет смысл для приложения, которое работает с TypeScript. Если ваше приложение не использует TypeScript, продолжайте.
Одна из возможностей Relay Compiler заключается в том, чтобы генерировать типы из каждого компонента данных. Давайте типизируем PersonRenderer и PersonCard, чтобы сделать приложение более мощным.
Типизация PersonRenderer
Типизируйте аргумент функции renderPerson people в PersonRenderer:
Импортируйте тип PersonRendererQuery из __generated__ папки, созданной внутри той же папки, что и PersonRenderer.
Типизация PersonCard
Перейдите к PersonCard, создайте новый объект типа и назовите его PersonCardProps:
Импортируйте типPersonCard_person из__generated__ папок:
Добавьте человека внутри типа PersonCardProps:
В аргументах props от PersonCard, типизируйте компонент сPersonCardProps:
Конечный результат обоих компонентов должен выглядеть так:
- PersonRenderer
- PersonCard
Конечный результат QueryRenderer продемонстрировал, как приложение может быть абстрагировано. Приложение может отображать Персону внутри Query Renderer. Поскольку PersonCard имеет больше компонентов, это не изменяет способ, которым был построен Query Renderer.
PersonRenderer был создан, чтобы показать, как можно выполнить запрос в простых шагах, в сочетании с мощью сервера Back4App. В следующем руководстве вы узнаете, как получить конкретный объект Персоны и показать его атрибуты.