governorjs

1.0.4 • Public • Published

governorjs

State manager courtesy of React.addons.update

Example

var React = require('react')
var governor = require('governor')
var hub = governor.hub

var messageStore = function(state) {
  state.set('some default text')
  hub.on('updateText', state.set)
}

var Message = React.createClass({
	render: function(props) {
		return (
			<div id="example">
				<MessageInput text={this.props.message} />
				{ this.props.message }
			</div>
		)
	}
})

var MessageInput = React.createClass({
	mixins: [ Governor.pureRenderMixin('text') ],
	render: function() {
		return <input type="text" value={this.props.message} onChange={R.compose(hub.bind('updateText'), R.path([ 'target', 'value' ]))} />
	}
})

governor({
  // binds messageStore to 'message' property of state given to below callback
  message: messageStore
}, function(state) {
  // state is the current state (initially an object with whatever changes the above stores make)
  React.render(<Message {...state} />, document.getElementById('message'))
})

##API

###governor :: (object) -> null

governor({
  foo: function(state) { state.set({ a: 1 }) },
  bar: function(state) { state.set('default bar') }
}, function(state) {
  // state.foo is fooStore's state
  // state.bar is barStore's state
  // do things with current state, like render a React component
})

###pureRenderMixin :: (str str ...etc) -> react-mixin-object

var mixin = Governor.pureRenderMixin('foo', 'zap')

The above mixin, when mixed into a component, would cause it to only rerender if its incoming "foo" or "zap" property was changed from the last render (using ===).

###Store interface :: (object) -> null A store is just a function.

This function will receive an object containing get, update, set, and merge methods, used to update the store's state.

update uses React.addons.update, documented here. set and merge are shortcuts to those specific types of updates.

Readme

Keywords

none

Package Sidebar

Install

npm i governorjs

Weekly Downloads

2

Version

1.0.4

License

ISC

Last publish

Collaborators

  • bbarr