react-di-lite
October 6, 2025 Β· View on GitHub
Lightweight, hierarchical dependency injection for React β inspired by Angularβs services.
π Description
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.
βοΈ Prerequisites
- React:
^17.0.0or higher - TypeScript (recommended): for full IntelliSense and type safety
π¦ Installation
npm install react-di-lite
# or
yarn add react-di-lite
π§© How It Works
Think 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();
};
π₯ Demo Video
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();
};
π₯ Demo Video
Notice separate state

πͺ Fully Typed
Built entirely with TypeScript, the library provides:
- Full IntelliSense support in your IDE
- Automatic type inference for injected services
