ditox-react package
Dependency injection container for React.js
Please see the documentation at ditox.js.org
Installation
You can use the following command to install this package:
npm install --save ditox-react
The packages can be used as UMD modules. Use
jsdelivr.com CDN site to load
ditox and
ditox-react:
<script src="//cdn.jsdelivr.net/npm/ditox/dist/umd/index.js" />
<script src="//cdn.jsdelivr.net/npm/ditox-react@2.3.0/dist/umd/index.js" />
<script>
const container = Ditox.createContainer();
</script>
Overview
ditox-react
is a set of helpers for providing and using a dependency container
in React apps:
- Components:
DepencencyContainer
- provides a new or existed container to React
components.DepencencyModule
- binds a dependency module to a new container.CustomDepencencyContainer
- provides an existed dependency container.
- Hooks:
useDependencyContainer()
- returns a provided dependency container.useDependency()
- returns a resolved value by a specified token. It throws
an error in case a container or value is not found.useOptionalDependency()
- returns a resolved value by a specified token,
or returns undefined
in case a container or value is not found.
Usage Examples
import {token} from 'ditox';
import {
DependencyContainer,
useDependency,
useDependencyContainer,
useOptionalDependency,
} from 'ditox-react';
const FOO_TOKEN = token();
const BAR_TOKEN = token();
function appDependencyBinder(container) {
container.bindValue(FOO_TOKEN, 'foo');
}
function App() {
return (
<DependencyContainer binder={appDependencyBinder}>
<NestedComponent />
</DependencyContainer>
);
}
function NestedComponent() {
const container = useDependencyContainer();
const foo = useDependency(FOO_TOKEN);
const bar = useOptionalDependency(BAR_TOKEN);
useEffect(() => {
console.log({foo, bar});
}, [foo, bar]);
return null;
}
Dependency Modules
Dependency modules can be provided to the app with <DependencyModule />
component:
function App() {
return (
<DependencyModule module={LOGGER_MODULE}>
<NestedComponent />
</DependencyModule>
);
}
This project is licensed under the
MIT license.