Проект библиотеки угловых компонентов с NGRX?
Я использовал NGRX для нескольких проектов сейчас, и в целом мне это нравится. Но я борюсь с тем, стоит ли использовать его в моем следующем проекте, который будет заключаться в создании угловой библиотеки компонентов.
Рекомендуется ли использовать ngrx в типах проектов угловой библиотеки? Как бы вы настроили корневое состояние против состояния функции? Будет ли основной модуль моего библиотечного проекта подключаться к корневому хранилищу ngrx? Если так, то если моя библиотека используется в родительском приложении, которое также использует ngrx, столкнется ли корневое хранилище?
Обновление (больше контекста):
Большинство компонентов в библиотеке будут типичными формами данных типа материала. Например, предоставление компонентов для поиска, обновления, создания и удаления объектов в нескольких приложениях. Мы упаковываем их как библиотеку компонентов (и библиотеку угловых элементов), потому что их нужно будет использовать в нескольких веб-приложениях, пока эти веб-приложения не объединятся в одно новое супер-веб-приложение (сроки конвергенции - 1 год в будущем.). Другим путем интеграции, который мы рассматривали, была загрузка iframe во все эти клиентские приложения.
Сами компоненты будут подключаться к уровню API для выполнения всех операций ввода-вывода данных. Компонентам может потребоваться разделить части состояния между компонентами.
2 ответа
Это трудно ответить без полного контекста.
Если мы говорим о "чистой" библиотеке компонентов, я бы не стал использовать библиотеки управления состояниями. Если компоненту нужно какое-то состояние, он должен управлять своим состоянием самостоятельно.
Компоненты, использующие эту библиотеку, всегда могут контролировать связь с магазином.
Мне было поручено разработать большую библиотеку, содержащую множество связанных компонентов, и я решил использовать в ней ngrx.
Я предполагаю, что вы знакомы с ngrx и реализовали необходимые файлы для состояния (действия, редукторы, селекторы и т. д.).
вот мои шаги по использованию ngrx в библиотеке angular:
шаг 1: добавьте зависимости ngrx (хранилище, эффект, сущность и т. д.) в основной проект
шаг 2: добавьте зависимости ngrx (хранилище, эффект, сущность и т. д.) в проект библиотеки.
"@ngrx/effects": "^16.1.0",
"@ngrx/entity": "^16.1.0",
"@ngrx/store": "^16.1.0",
примечание: обновите PeerDependency в библиотеке также
шаг 3: начальные модули ngrx в app.module.ts с методом forRoot
StoreModule.forRoot({}),
EffectsModule.forRoot([]),
шаг 4: начальные модули ngrx в библиотечном модуле с методом forFeature
StoreModule.forFeature(TEST_FEATURE_NAME,{testPage: testPageReducer}),
EffectsModule.forFeature([]), // no effects for now