ditox-react
Version:
Dependency injection container for React.js
33 lines • 1.08 kB
JavaScript
import { useContext, useMemo } from 'react';
import { DependencyContainerContext } from './DependencyContainer';
/**
* @internal
*/
export function useDependencyContainer(mode) {
const container = useContext(DependencyContainerContext);
if (!container && mode === 'strict') {
throw new Error('Container is not provided by DependencyContainer component');
}
return container;
}
/**
* @category Hook
*
* Returns a dependency by token, or fails with an error.
*/
export function useDependency(token) {
const container = useDependencyContainer('strict');
const value = useMemo(() => container.resolve(token), [container, token]);
return value;
}
/**
* @category Hook
*
* Returns a dependency by token, or `undefined` in case the dependency is not provided.
*/
export function useOptionalDependency(token) {
const container = useDependencyContainer();
const value = useMemo(() => container === null || container === void 0 ? void 0 : container.get(token), [container, token]);
return value;
}
//# sourceMappingURL=hooks.js.map