Skip to content

Instantly share code, notes, and snippets.

@ryanflorence
Last active August 29, 2015 14:07
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ryanflorence/12cc7b93af94bdf06d2a to your computer and use it in GitHub Desktop.
Save ryanflorence/12cc7b93af94bdf06d2a to your computer and use it in GitHub Desktop.
var EventEmitter = require('events').EventEmitter;
var mergeInto = require('react/lib/mergeInto');
module.exports = createStore;
function createStore(initialState) {
var events = new EventEmitter();
var state = initialState || {};
return {
setState: function(newState) {
mergeInto(state, newState);
this.emitChange();
},
getState: function() {
return state;
},
addChangeListener: function (listener) {
events.on('change', listener);
},
removeChangeListener: function (listener) {
events.removeListener('change', listener);
},
emitChange: function() {
events.emit('change');
}
};
}
@ryanflorence
Copy link
Author

Usage:

// creating the store
var createStore = require('../wherever/createStore');

var SomeStore = module.exports = createStore({
  users: [],
  whatever: false
});

// in a component

React.createClass({
  componentDidMount: function() {
    SomeStore.addChangeListener(this.onChange);
  }
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment