Skip to main content

State Management Libraries

Zustand - Lightweight State Management

npm install zustand
import create from 'zustand';

interface CartStore {
items: CartItem[];
addItem: (item: CartItem) => void;
removeItem: (id: string) => void;
clearCart: () => void;
}

const useCartStore = create<CartStore>(set => ({
items: [],
addItem: item => set(state => ({ items: [...state.items, item] })),
removeItem: id =>
set(state => ({ items: state.items.filter(i => i.id !== id) })),
clearCart: () => set({ items: [] }),
}));

// Usage
function Cart() {
const items = useCartStore(state => state.items);
const addItem = useCartStore(state => state.addItem);

return <div>{items.length} items</div>;
}

Redux Toolkit

npm install @reduxjs/toolkit react-redux
import { configureStore, createSlice } from '@reduxjs/toolkit';

const counterSlice = createSlice({
name: 'counter',
initialState: { value: 0 },
reducers: {
increment: state => {
state.value += 1;
},
decrement: state => {
state.value -= 1;
},
},
});

const store = configureStore({
reducer: { counter: counterSlice.reducer },
});

// Usage
import { useDispatch, useSelector } from 'react-redux';

function Counter() {
const count = useSelector(state => state.counter.value);
const dispatch = useDispatch();

return (
<div>
<button onClick={() => dispatch(counterSlice.actions.increment())}>
+
</button>
{count}
</div>
);
}

Comparison

FeatureContext APIZustandRedux Toolkit
Bundle SizeIncluded~1KB~10KB
Learning CurveEasyEasyMedium
DevToolsNoYesYes
MiddlewareNoYesYes
Best ForSimple stateMedium appsLarge apps