You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Можно немного ослабить связь между view и di убрав напрямую обращение в useComponentRegistry(id) из @bem-react/di, т.к. у нас все сущности хранятся в реестре, а реестр хранится рядом с компонентом, то можно делать как-то так:
App/registry/index.ts
import{FC}from'react'import{createRegistry,createDepsHook}from'@bem-react/di'typeAppDeps={Button: FC<any>Input: FC<any>}// Тут просто заменил конструктор на фабрику, внутри можно генерировать id,// т.к. по факту этот id больше нигде не используется, если нужно будет// переопределить какой-то компонент в эксперименте, можно сделать форк реестра.exportconstregistry=createRegistry<AppDeps>()// Хелпер, который внутри себя вызывает useComponentRegistry.exportconstuseDeps=createDepsHook<AppDeps>(registry.id)// Можно сделать альтертативный вариант, возвращать тапл:exportconst[registry,useDeps]=createRegistry<AppDeps>()
App/registry/desktop.tsx
import{registryasemptyRegistry}from'./index'// Метод fork копирует полностью реестр, по аналогии с merge,// но в качестве аргумента принимает хэшсет с компонентами.exportconstregistry=emptyRegistry.fork({Button: ()=><button>login</button>,Input: ()=><inputplaceholder="email"/>,})// Либо альтертативный вариант:exportconstregistry=emptyRegistry.fork().fill({Button: ()=><button>login</button>,Input: ()=><inputplaceholder="email"/>,})
App.tsx
import{useDeps}from'./registry/index'exportconstApp=()=>{// Тут мы ничего не знаем про реализацию DI,// просто берем зависимости из своего реестра,// к тому же имеем сразу вывод типов.const{ Button, Input }=useDeps()return(<><Button/><Input/></>)}
Можно немного ослабить связь между view и di убрав напрямую обращение в
useComponentRegistry(id)
из@bem-react/di
, т.к. у нас все сущности хранятся в реестре, а реестр хранится рядом с компонентом, то можно делать как-то так:App/registry/index.ts
App/registry/desktop.tsx
App.tsx
App@desktop.tsx
TODO
The text was updated successfully, but these errors were encountered: