Created
January 9, 2014 23:52
-
-
Save zpao/8344371 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var CustomEvents = (function() { | |
var _map = {}; | |
return { | |
subscribe: function(name, cb) { | |
_map[name] || (_map[name] = []); | |
_map[name].push(cb); | |
}, | |
notify: function(name, data) { | |
if (!_map[name]) { | |
return; | |
} | |
// if you want canceling or anything else, add it in to this cb loop | |
_map[name].forEach(function(cb) { | |
cb(data); | |
}); | |
} | |
} | |
})(); | |
// in <MyComponent> | |
CustomEvents.subscribe('foo', function(data) { | |
console.log('foo', data); | |
}); | |
// in <SomeOtherComponent> | |
CustomEvents.notify('foo', {bar: 7}); | |
If using Browserify, Node event emitters is another option: http://nodejs.org/api/events.html
For communication between two components that don't have a parent-child relationship, you can set up your own global event system. Subscribe to events in componentDidMount(), unsubscribe in componentWillUnmount(), and call setState() when you receive an event.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
In which part of the component lifecycle would I put
CustomEvents.subscribe
? Anywhere?render
?