Monitor signal changes outside React. Perfect for logging, analytics, and debugging!
signal.subscribe()Subscribe to see logs appear when the signal changes!
const mySignal = createSignal(0);const unsubscribe = mySignal.subscribe((newValue) => {
console.log('Changed to:', newValue);
});💡 Your callback runs every time the signal changes!
unsubscribe(); // Prevents memory leaks!import { createSignal } from 'signalforge/core';
// Create a signal
const userCount = createSignal(0);
// Subscribe to changes
const unsubscribe = userCount.subscribe((newCount) => {
console.log(`Users online: ${newCount}`);
// Send to analytics
analytics.track('user_count_changed', { count: newCount });
// Update dashboard
updateDashboard(newCount);
});
// When a user joins
userCount.set(userCount.get() + 1); // Triggers subscriber!
// When a user leaves
userCount.set(userCount.get() - 1); // Triggers subscriber!
// Clean up when component unmounts
useEffect(() => {
return () => unsubscribe();
}, []);
// ✨ Benefits:
// • Works outside React components
// • Perfect for logging and analytics
// • No re-renders triggered
// • Can have multiple subscriberssignal.subscribe((val) => {
analytics.track('value_changed', {val});
});signal.subscribe((val) => {
console.log('State:', val);
});signal.subscribe((val) => {
localStorage.setItem('data', val);
});signal.subscribe((val) => {
if (val > 100) alert('High!');
});Forgetting to unsubscribe causes memory leaks. Your callback will keep running even after the component unmounts!
useEffect(() => {
signal.subscribe(callback);
// No cleanup!
}, []);useEffect(() => {
const unsub = signal.subscribe(callback);
return () => unsub();
}, []);Master subscriptions? Try these advanced patterns: