1.0.61 • Published 7 months ago

react-di-container v1.0.61

Weekly downloads
-
License
MIT
Repository
github
Last release
7 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

7 months ago

1.0.5

7 months ago

1.0.61

7 months ago

1.0.43

7 months ago

1.0.42

7 months ago

1.0.416

10 months ago

1.0.415

10 months ago

1.0.414

10 months ago

1.0.413

10 months ago

1.0.412

10 months ago

1.0.411

10 months ago

1.0.41

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago