UNPKG

react-obsidian

Version:

Dependency injection framework for React and React Native applications

25 lines (22 loc) 763 B
import { useEffect, useState } from 'react'; import { Constructable } from '../../types'; import { ObjectGraph } from '../../graph/ObjectGraph'; import graphRegistry from '../../graph/registry/GraphRegistry'; import referenceCounter from '../../ReferenceCounter'; export default <P>( Graph: Constructable<ObjectGraph>, target: any, props?: Partial<P>, injectionToken?: string, ) => { const [graph] = useState(() => { const resolvedGraph = graphRegistry.resolve(Graph, 'lifecycleOwner', props, injectionToken); resolvedGraph.onBind(target); return resolvedGraph; }); useEffect(() => { referenceCounter.retain(graph); return () => referenceCounter.release(graph, (g) => graphRegistry.clear(g)); }, [graph]); return graph; };