react-constore
Version:
Lightweight and efficient state management for React with TypeScript support
185 lines (142 loc) ⢠5.62 kB
Markdown
# React ConStore
ā” **Ultra-lightweight state management for React 18+ applications (~950B gzipped)**
## š Quick Stats
| š¦ NPM Package | š Bundle Size | ā GitHub Stars | š„ Downloads |
|----------------|----------------|-----------------|--------------|
| [react-constore](https://www.npmjs.com/package/react-constore) | **~950B gzipped** | [ā Star us!](https://github.com/mostafarastegar/react-constore/stargazers) | [š NPM Trends](https://npmtrends.com/react-constore) |
## ā
Features
- ā
**TypeScript Ready** - Full type safety out of the box
- ā
**React 18+ Compatible** - Concurrent features supported
- ā
**Zero Dependencies** - No external packages needed
- ā
**Devtools** - use [`Redux-Devtools`](docs/devtools-middleware.md) for debugging
- ā
**SSR Ready** - Works with Next.js App Router
- ā
**Tree Shakeable** - Only bundle what you use
- ā
**MIT Licensed** - Free for commercial use
## š Quick Links
- š **Documentation**: [GitHub Repository](https://github.com/mostafarastegar/react-constore)
- š¦ **Install**: `npm install react-constore`
- š **Bundle Analysis**: [Bundle Phobia](https://bundlephobia.com/package/react-constore)
- š **Download Stats**: [NPM Package](https://www.npmjs.com/package/react-constore)
- š **Issues & Support**: [GitHub Issues](https://github.com/mostafarastegar/react-constore/issues)
## š Why React ConStore?
```jsx
// Traditional React state management ā
const [count, setCount] = useState(0);
const [user, setUser] = useState({ name: 'Guest' });
const [todos, setTodos] = useState([]);
// Props drilling nightmare... š±
// With React ConStore ā
const store = createStore({
count: 0,
user: { name: 'Guest' },
todos: []
});
// Use anywhere, anytime š
const [count, setCount] = store.useStoreKey('count');
```
## ⨠Key Features
| Feature | Description | Benefit |
|---------|-------------|---------|
| šŖ¶ **Ultra Lightweight** | Less than 1KB gzipped | Faster bundle, better performance |
| āļø **React 18/19 Ready** | Concurrent features, automatic batching | Future-proof your app |
| šÆ **Smart Re-renders** | Deep equality checks | Only render when data actually changes |
| š **Selective Subscriptions** | Subscribe to specific keys | Granular control over updates |
| š **Full TypeScript** | Complete type safety | Catch bugs at compile time |
| š **SSR Compatible** | Next.js 13+ App Router | Server-side rendering support |
## š¦ Installation
```bash
# npm
npm install react-constore
# yarn
yarn add react-constore
# pnpm
pnpm add react-constore
```
## šÆ Quick Start
```jsx
'use client'; // for Next.js App Router
import createStore from 'react-constore';
// 1. Create your store
const store = createStore({
count: 0,
user: { name: 'Guest', age: 25 },
todos: [],
theme: 'light'
});
// 2. Use in components
function Counter() {
const [count, setCount] = store.useStoreKey('count');
return (
<div>
<h2>Count: {count}</h2>
<button onClick={() => setCount(count + 1)}>
Increment
</button>
<button onClick={() => setCount(c => c + 1)}>
Functional Update
</button>
</div>
);
}
function UserProfile() {
const [user, setUser] = store.useStoreKey('user');
return (
<div>
<h2>{user.name} (Age: {user.age})</h2>
<button onClick={() => setUser({ ...user, age: user.age + 1 })}>
Happy Birthday! š
</button>
</div>
);
}
// 3. Components automatically sync!
function App() {
return (
<div>
<Counter />
<UserProfile />
</div>
);
}
```
## š Documentation
### š Getting Started
- [Installation & Quick Start](#-installation)
- [Core Concepts](docs/hooks-guide.md)
### š API Reference
- [Hooks Guide](docs/hooks-guide.md) - `useStoreKey()`, `useStoreKeys()`, `useStore()`
- [Store API](docs/store-api.md) - `getState()`, `setState()`, `subscribe()`
### š§ Advanced Usage
- [DevTools](docs/devtools-middleware.md) - Debugger mode and built-in middlewares
- [Advanced Patterns](docs/advanced-patterns.md) - Computed values, actions, middleware
- [React Integration](docs/react-integration.md) - React 18+, Next.js, React Native
### š Migration & Comparison
- [Migration Guide](docs/migration-guide.md) - From Redux, Zustand, React Context API
### š Best Practices & Help
- [Best Practices](docs/best-practices.md)
- [Testing](docs/testing.md)
- [Troubleshooting](docs/troubleshooting.md)
## š Bundle Size Comparison
| Library | Size (gzipped) | Features |
|---------|----------------|----------|
| **React ConStore** | **~950B** | ā
Hooks ā
TypeScript ā
SSR ā
DevTools ā
Middleware ā
Persist |
| Redux Toolkit | ~3KB | ā
DevTools ā
Middleware ā
Time Travel ā Simple API |
| Zustand | ~600B | ā
Simple ā
Middleware ā Built-in TypeScript |
| Jotai | ~4KB | ā
Atomic ā
TypeScript ā Learning Curve |
## š When to Use
**Use React ConStore when:**
- ā
You want minimal bundle size
- ā
Simple to medium complexity apps
- ā
TypeScript-first development
- ā
React 18+ features are important
- ā
Devtools for debugging
- ā
Custom middleware
**Consider alternatives when:**
- š¤ **Redux Toolkit**: Need time-travel debugging, complex middleware
- š¤ **Zustand**: Need advanced features (immer, persist, devtools)
- š¤ **Jotai**: Bottom-up atomic state management
- š¤ **Context API**: Very simple, component-local state
## š License
MIT Ā© [Mostafa Rastegar](https://github.com/mostafarastegar)
---
**Made with ā¤ļø for the React community**