Publish/subscribe (pub/sub) është një model mesazhjesh ku botues lëshojnë ngjarje dhe pajtuesit reagojnë ndaj tyre, pa njohur drejtpërdrejt njëri-tjetrin. Shumë biblioteka të gjendjes (dhe sistemet e ngjarjeve) ndërtohen mbi të — një dyqan boton ndryshime dhe komponentët pajtojnë në to.
Një dyqan minimal pub/sub
function createStore(initial) {
let state = initial;
const subscribers = new Set();
return {
getState: () => state,
setState(next) {
state = { ...state, ...next };
subscribers.forEach((fn) => fn(state)); // PUBLISH: notify all subscribers
},
subscribe(fn) {
subscribers.add(fn); // SUBSCRIBE
return () => subscribers.delete(fn); // return an unsubscribe function
},
};
}
Komponentët thërrasin subscribe(callback) për të qenë të njoftuar; dyqani thërret secilin pajtues kur gjendjja ndryshon (setState). Kjo është në thelb se si funksionojnë store.subscribe i Redux, Zustand, dhe event emitterët nën sipërfaqe.
Përfitimi i çiftimit lirshëm
Publisher (the store) doesn't know WHO is listening.
Subscribers don't know WHO published.
→ They're decoupled, communicating only through the event/store.
Ky çiftim i lirshëm lejon që pjesë të palidhura të një aplikacioni të reagojnë ndaj të njëjtave ndryshime pa referenca të drejtpërdrejta me njëri-tjetrin — fleksibël dhe i zgjerueshëm.
Kompromisiet
✓ Pros: decoupled, flexible, many-to-many communication, easy to add listeners
✗ Cons:
- Implicit flow — hard to trace WHO reacts to an event (vs explicit calls)
- Memory leaks — forgetting to UNSUBSCRIBE keeps dead listeners alive
- Debugging — indirection makes "why did this run?" harder to answer
- Ordering — subscriber execution order can be non-obvious
Rreziku më i madh praktik është të harruarit të shpëtimit (p.sh. në montim të komponentit), i cili rrjedh memorie dhe mund të shkaktojë që komentet të qëndrojnë në komponentë të vdekura.
useEffect(() => {
const unsub = store.subscribe(handleChange);
return unsub; // ✅ cleanup — unsubscribe on unmount
}, []);
Pse është e rëndësishme
Pub/sub është mekanizmi themelor i shumicës së bibliotekave të gjendjes dhe sistemeve të ngjarjeve — t'i kuptosh atë demistifikon se si dyqanet e njoftojnë komponentët dhe si funksionojnë subscribe/unsubscribe.
Shpjegon si fuqinë (komunikim i çiftuar i lirshëm, fleksibël) ashtu edhe rreziqet (rrjedhja e të dhënave implicite që është e vështirë të ndjeket, dhe rrjedhje memorie nga pajtuesit e papastruar).
Përkujtimi i pub/sub ju ndihmon të arsyetoni rreth reaktivitetit nën sipërfaqe dhe përforcon rëndësinë e pastrimeve gjithmonë të pajtuesve.
