Lightweight, hierarchical dependency injection for React — inspired by Angular’s services.
React Service Provider offers a simple and powerful way to manage shared state and logic across your React application.
It brings Angular-like service patterns into React — enabling hierarchical dependency injection and shared instances across your component tree.
- React:
^17.0.0or higher - TypeScript (recommended): for full IntelliSense and type safety
npm install react-di-lite
# or
yarn add react-di-liteThink of it like a React hook, but with shared state — allowing multiple components to access and modify the same service instance.
- Global services provider
// src/services/CounterService.tsx
import { useState } from 'react';
export const CounterService = () => {
const [count, setCount] = useState(0);
const increment = () => setCount((c) => c + 1);
return { count, increment };
};
// src/services/index.ts
import { createServicesProvider } from 'react-di-lite';
import { CounterService } from './CounterService';
// name these whatever suits you
export const [GlobalServicesProvider, useGlobalServices] =
createServicesProvider({
counterService: CounterService,
});
// src/App.tsx
import { GlobalServicesProvider } from './services';
import { Component1 } from './components/Component1';
import { Component2 } from './components/Component2';
function App() {
return (
<GlobalServicesProvider>
<Component1 />
<Component2 />
</GlobalServicesProvider>
);
}
// src/components/Component1.tsx
import { useGlobalServices } from '../services';
export const Component1 = () => {
const { counterService } = useGlobalServices();
};
// src/components/Component2.tsx
import { useGlobalServices } from '../services';
export const Component2 = () => {
const { counterService } = useGlobalServices();
};Notice shared state
- Multiple services providers
// src/services/index.ts
import { createServicesProvider } from 'react-di-lite';
import { CounterService } from './CounterService';
// name these whatever suits you
export const [GlobalServicesProvider, useGlobalServices] =
createServicesProvider({
counterService: CounterService,
...
});
export const [ChatServicesProvider, useChatServices] = createServicesProvider({
counterService: CounterService,
...
});
// src/App.tsx
import { GlobalServicesProvider, ChatServicesProvider } from './services';
import { Component1 } from './components/Component1';
import { Component2 } from './components/Component2';
function App() {
return (
<GlobalServicesProvider>
<Component1 />
<ChatServicesProvider>
<Component2 />
</ChatServicesProvider>
</GlobalServicesProvider>
);
}
// src/components/Component1.tsx
import { useGlobalServices } from '../services';
export const Component1 = () => {
const { counterService } = useGlobalServices();
};
// src/components/Component2.tsx
import { useChatServices } from '../services';
export const Component2 = () => {
const { counterService } = useChatServices();
};Notice separate state
Built entirely with TypeScript, the library provides:
- Full IntelliSense support in your IDE
- Automatic type inference for injected services


