Skip to main content

EventWatcher

EventWatcher is a core component that provides a flexible event handling system. It allows you to create, bind, and trigger custom events in your application.

Overview

EventWatcher is a generic class that can be used to handle any type of event. It provides a simple and efficient way to implement event-driven architecture in your application.

Features

  • Event binding and unbinding
  • Event emission
  • One-time event listeners
  • Type-safe event names
  • Generic event data handling
  • Cross-component event communication
  • Memory leak prevention

Examples

Event Binding and Emission

// Create an event watcher
const watcher = new EventWatcher();

// Bind an event handler
watcher.bind('userLogin', (username) => {
console.log(`User ${username} logged in`);
});

// Trigger the event
watcher.emit('userLogin', 'john_doe');

One-time Event Listener

const watcher = new EventWatcher();

// Bind a one-time event handler
watcher.once('initializationComplete', () => {
console.log('Initialization completed');
});

// Trigger the event
watcher.emit('initializationComplete');

Event Unbinding

const watcher = new EventWatcher();

// Bind an event handler
const handler = (data) => console.log(data);
watcher.bind('dataReceived', handler);

// Unbind the event
watcher.unbind('dataReceived');

Best Practices

  1. Type Safety

    • Use TypeScript's generic type parameter to ensure type safety for event names
    • Define event types for better code completion and error checking
  2. Event Naming

    • Use clear and consistent naming conventions for events
    • Follow a domain-specific naming pattern
    • Document event names and their expected data
  3. Memory Management

    • Always unbind events when they are no longer needed to prevent memory leaks
    • Use one-time event listeners for events that should only trigger once
    • Clean up event listeners in component unmount or cleanup functions
  4. Error Handling

    • Implement proper error handling in event callbacks
    • Use try-catch blocks for error-prone operations
    • Handle event emission errors gracefully
  5. Event Data

    • Keep event data simple and avoid passing large objects
    • Use TypeScript interfaces to define event data structures
    • Validate event data before processing
  • Process: Uses EventWatcher for process event handling