Почему NGXS State Management?
Разве не было бы легко сохранить где-нибудь часть переменной или объекта, которые можно было бы отозвать в любой момент в любой момент? Что-то вроде библиотеки переменных, которая постоянна во всем приложении и может быть легко обновлена и вызвана.
Любые изменения объекта, отныне известные как «состояние», также можно было легко просматривать и регистрировать, чтобы мы, как разработчики, могли видеть, произошло ли изменение и когда оно произошло.
На мой взгляд, здесь в игру вступает NGXS State Management. В этом случае он помогает веб-приложению или магазину приложений Ionic и эффективно управляет его состояниями, состоящими из объектов и переменных.
Благодарим Бишена Пателя за идею этого конкретного содержания.
Предварительное условие
- Знакомство с Ionic и Angular. Если вы никогда раньше не занимались разработкой с помощью Ionic, это отличный фреймворк, который упрощает вам разработку прогрессивных веб-приложений и мобильных приложений.
- Знакомство с TypeScript. Большая часть работы будет выполняться в TypeScript, поэтому требуется небольшое знакомство с TypeScript.
В данном конкретном примере я буду использовать Ionic версии 5 (Angular) с Ionic CLI (интерфейс командной строки) версии 6.13.1.
Мы будем использовать документацию по SpaceX API, которая бесплатна и может быть легко доступна здесь:
Не волнуйтесь, мы не будем тянуть API для запуска ракеты. Ничего подобного. Мы будем использовать простой API для получения информации о SpaceX как о компании.
Это будет простой запрос GET со следующего URL-адреса:
Https://api.spacexdata.com/v3/info
Приведенная выше ссылка должна возвращать объект JSON, содержащий информацию о компании SpaceX.
0. Начать ионный проект
Я не могу это подчеркнуть, если вы не знакомы с Ionic, перейдите на этот веб-сайт, чтобы начать:
Убедитесь, что вы выбрали Angular в качестве основного фреймворка, который будет использоваться в Ionic.
1. Установите NGXS.
Затем нам нужно установить NGXS, где мы будем организовывать состояния.
npm install @ngxs/store --save
Также неплохо установить следующие библиотеки NGXS, которые помогут нам выйти из системы и сохранить наши состояния:
Подключаемый модуль Logger:
npm install @ngxs/logger-plugin --save
Плагин магазина:
npm install @ngxs/storage-plugin --save
2. Использование сервиса для вызова API и сохранения в состоянии
Создайте службу для вызова API SpaceX. Я собираюсь называть эту услугу Сетевой службой. Чтобы сгенерировать эту службу в Ionic, выполните в командной строке следующую команду:
ionic g service ngxs/network
Это создаст папку с именем ngxs с файлом network.service.ts внутри папки.
В нашем файле network.service.ts добавьте следующее для вызова SpaceX API.
Строки с 10 по 12 - это функция, в которой мы вызываем сервер SpaceX.
Обратите внимание: для простоты я буду использовать типичную библиотеку Angular / common / http. Я бы рекомендовал использовать HTTP-библиотеку Ionic Capacitor, если вы планируете создать мобильное приложение.
3. Настройка файлов NGXS
Создайте следующие файлы в папке ngxs, созданной на предыдущем шаге:
ngxs / action.ts
ngxs / state.ts
Обратите внимание. В некоторых случаях вам может потребоваться создать файл interface.ts для объявления interface.ts. Однако это простое руководство, и я хочу упростить его. Я объявлю интерфейс в самом файле state.ts вместо использования другого файла.
В файле action.ts объявите действие в файле action.ts следующим образом:
Вышеупомянутое действие будет вызвано позже в нашей функции диспетчеризации магазина. Не беспокойся об этом пока.
Затем в нашем файле state.ts нам нужно сделать 3 вещи:
- Объявить интерфейс
- Объявить модель
- Объявите действие, которое будет выполнено при выполнении вышеуказанной функции.
Наш файл state.ts должен выглядеть примерно так:
- Обратите внимание, что мы объявили свое действие из action.ts в строке 4
- Мы также объявили Injectable () для использования нашего SpaceXInfoState
- Строка 7–30 - это то место, где мы объявляем интерфейс. Этот интерфейс основан на ожидаемом результате при вызове API.
- В строке 32 мы объявляем начальное состояние и даем нашему состоянию имя, в данном случае его SpaceXInfoState.
- Мы также заявили о нашей сетевой услуге в строке 40
- Строка 42 - строка 52 - это место, где мы выполняем функцию и сохраняем ответ в нашем состоянии с помощью patchState ()
4. Настройка NGXS на app.module.ts
Теперь, когда мы проделали всю тяжелую работу с файлами сетевых служб, состояний и действий, мы, наконец, готовы объявить NGXS в нашем файле app.module.ts, чтобы мы могли использовать NGXS в нашем приложении.
Наш файл app.module.ts должен выглядеть примерно так:
- Строки 9, 10 и 11 - это то место, где мы импортируем свойства NGXS в наше приложение, те, которые мы установили ранее.
- Мы добавляем импортированные модули в наш список импорта модулей в строках с 23 по 31.
- В NgxsModule я добавил SpaceXInfoState (импортированный в строку 14) в список состояний, которые будут использоваться в этом приложении. Если в файле action.ts объявлены другие состояния, добавьте их сюда.
- Также обратите внимание, я добавил HttpClientModule (строка 13 и строка 32). Если вы используете метод HTTP-конденсатора, добавлять его не требуется.
5. Использование store dispatch () для получения данных.
Теперь нам нужно выполнить созданное нами действие. В моем случае я выполню функцию из нашего файла home.page.ts. Наш файл home.page.ts должен выглядеть примерно так:
- Строки 2–4 - это то место, где мы импортируем
Select, Store
наше действие (GET_SPACEX_DATA
) и наше состояние (SpaceXInfoState
). - The
ionViewWillEnter()
функция будет выполняться каждый раз при загрузке домашней страницы. В этой функции мы используемstore.dispatch
для выполнения действия, которое мы объявили вstate.ts
- Чтобы извлечь и объявить данные, я также объявил функцию
getData()
, которая будет выполняться, когдаstore.dispatch
завершит свой запуск. - Внутри функции
getData()
мы используемselectSnapshot
для назначения данных переменнойcto_propulsion
и переменнойfounded
. Теперь мы можем использоватьcto_propulsion
иfounded
в нашем HTML так, как мы считаем нужным, как в любом типичном угловом проекте.
Итак, готово, легкий лимонный сок. То, что показано выше, - это простой способ использования хранилища NGXS и selectSnapshot для получения данных из вашего состояния. Состояние будет оставаться до тех пор, пока сеанс остается действительным.
На этом можно закончить, и все будет нормально, но за дополнительные баллы…
…еще кое-что…
БОНУС: Использование селектора магазина для получения данных
Вы также можете использовать селектор магазина для получения асинхронных данных из вашего состояния. Нам нужно добавить в наш файл state.ts следующее:
- В приведенном выше файле state.ts я добавил селектор
ceo
в строке 42 до строки 45. - Теперь мы можем использовать
ceo
selector внутриhome.page.ts
следующим образом:
- В приведенном выше примере home.page.ts я добавил
ceo$
в строке 14. Это должно создать асинхронную переменную, которую вы можете использовать в своем файле Angular HTML. Любые изменения в состоянииceo
будут отражены непосредственно в переменнойceo$
без какого-либо дополнительного вызова функции.
Вот и все. Вышеупомянутый метод ни в коем случае не является исчерпывающим, но это простой метод, демонстрирующий, как использовать управление состоянием NGXS для хранения данных, которые легко доступны в любом месте вашего приложения Ionic.
Надеюсь, что приведенная выше статья предоставит вам полезное руководство по использованию NGXS в вашем приложении.
Селамат Менгатуркара
Больше контента на plainenglish.io