Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
development:javascript:react:pub_sub [2020/02/28 13:38]
kalenpw created
— (current)
Line 1: Line 1:
-====== Pub Sub / Event Bus ====== 
-Useful for when you don't want to include Redux, but would like to have events that can be triggered and listened to across unrelated components.  
  
----- 
- 
-===== 1) Create EventBus ===== 
-I usually put this in ''src/Util/event_bus.js'' 
-<file javascript event_bus.js> 
-const EventBus = { 
-    /** 
-     * events stored as object with each field being an event 
-     */ 
-    events: {}, 
-    /** 
-     * Call all callbacks for given event 
-     * @param {string} event name of event 
-     * @param {*} data data sent to all event callbacks 
-     */ 
-    dispatch: (event, data) => { 
-        if (!EventBus.events[event]) { 
-            return; 
-        } 
-        EventBus.events[event].forEach(callback => callback(data)); 
-    }, 
-    /** 
-     * @param event - the name of the event 
-     * @param callback - the function to be called 
-     */ 
-    subscribe: (event, callback) => { 
-        if (!EventBus.events[event]) { 
-            EventBus.events[event] = []; 
-        } 
-        EventBus.events[event].push(callback); 
-    }, 
-    /** 
-     * Must be called with the exact same callback as subscribe 
-     * as we match functions by their .toString() 
-     * @param event - the name of the event 
-     * @param callback - the function to be removed 
-     */ 
-    unsubscribe: (event, callback) => { 
-        let newEvents = EventBus.events[event].filter((event) => { 
-            // hack to ensure we remove the right event 
-            if (!(callback.toString() == event.toString())) { 
-                return event; 
-            } 
-        }) 
-        EventBus.events[event] = newEvents; 
-    } 
-} 
- 
-export default EventBus; 
-</file>