Last active
August 29, 2015 14:05
-
-
Save karlmikko/07dec76a7bed23f79bdb to your computer and use it in GitHub Desktop.
GetStoresMixin
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
function findRoutesComponent(component){ | |
if(component._isRoutesComponent && component._isRoutesComponent()){ | |
return component; | |
} | |
if(component._owner){ | |
return findRoutesComponent(component._owner); | |
} | |
return null; | |
}; | |
var GetStoresMixin = { | |
getStores: function(){ | |
var routesComponent = findRoutesComponent(this); | |
if(routesComponent && routesComponent._getStores){ | |
return routesComponent.getStores(); | |
} | |
return null; | |
}; | |
module.exports = GetStoresMixin; |
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 Routes = React.createClass({ | |
mixins: [GetStoresMixin], | |
_URLStore: null, | |
_RouteStore: null, | |
_ActiveStore: null, | |
_isRoutesComponent:function(){ | |
return true; | |
}, | |
_getStores:function(){ | |
this._URLStore = this._URLStore || new URLStore(); | |
this._RouteStore = this._RouteStore || new RouteStore(); | |
this._ActiveStore = this._ActiveStore || new ActiveStore(); | |
return { | |
URLStore: this._URLStore, | |
RouteStore: this._RouteStore, | |
ActiveStore: this._ActiveStore | |
}; | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The gist allows a component to look up the
this._owner
tree of React to find the<Routes />
instance it is a child of. Then get all the store instances from that<Routes />
instance.This allows the
<Routes />
instance to hold the reference to all the store instances. When the<Routes />
instance is destroyed / out of scope; all the stores and listeners should be freed; pending they aren't leaked elsewhere. If the store instances are kept inside react component instances that are children of the parent<Routes />
instance, it should be fine. (Please someone tell me if this is wrong)