react-di-container v1.0.61
Контроллеры
Если компонент реализуют в себе сложную логику, эту логику необходимо вынести на уровень контроллера. Это позволит разбить общее полотно кода на часть визуализации и часть с логикой (*VC-подход).
Для работы с контроллерами в утилитах есть функционал:
- хок
withIsolatedScope
позволяет создать новый скоуп - хук
useCreateScoped
при маунте компонента создает контроллер и удаляет его при анмаунте - хук
useScoped
позволяет получить созданный ранее контроллер из текущего скоупа - хук
useCreateTransient
работает аналогичноuseCreateScoped
, но не добавляет созданный контроллер в скоуп
Контроллеры должны наследоваться от BaseController
. У базового класса контроллера существует несколько необходимых для этого методов:
onCreate
,onDestroy
- колбеки, которые вызываются соответственно сразу после добавления и прямо перед удалением подконтроллера- методы
addSubController
иaddSubControllers
- создает дочерние контроллеры и добавляет в скоуп - метод
removeSubController
- удаляет дочерний контроллер из скоупа - метод
getScoped
- получает созданный ранее контроллер из скоупа - метод
hasScoped
- позволяет узнать существует ли контроллер в текущем скоупе
Внутри одного скоупа невозможно дважды создать один контроллер. Для обхода этого ограничения в зависимости от конкретного кейса можно использовать withIsolatedScope
или useCreateTransient
Инициализация
const GlobalsRef: ObjectRef<TGlobals> = window
export async function initGlobals() {
const services = new ServicesManager()
const stores = new StoresManager()
setGlobal(GlobalsRef, { stores, services })
return { stores, services }
}
export function getGlobals() {
return getGlobal(GlobalsRef)
}
export function getService<T extends TServicesKeys>(serviceName: T): TServices[T] {
return getGlobals().services.getService(serviceName)
}
export function getStore<T extends TStoresKeys>(storeName: T): TStores[T] {
return getGlobals().stores.getStore(storeName)
}
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago