1.0.61 • Published 5 months ago

react-di-container v1.0.61

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

Контроллеры

Если компонент реализуют в себе сложную логику, эту логику необходимо вынести на уровень контроллера. Это позволит разбить общее полотно кода на часть визуализации и часть с логикой (*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)
}
1.0.6

5 months ago

1.0.5

5 months ago

1.0.61

5 months ago

1.0.43

5 months ago

1.0.42

5 months ago

1.0.416

9 months ago

1.0.415

9 months ago

1.0.414

9 months ago

1.0.413

9 months ago

1.0.412

9 months ago

1.0.411

9 months ago

1.0.41

9 months ago

1.0.4

9 months ago

1.0.3

9 months ago

1.0.2

9 months ago

1.0.1

9 months ago

1.0.0

9 months ago