amamori v0.1.2
Amamori
Minimal Flux Framework.
Overview
Component is a class have utility to observe store event that inherits React view.
Dispatcher is just EventEmitter.
ActionCreator is just functions.
Store is just a class inherits EventEmitter.
API
Dispatcher and AppContextProvider
Dispatcher provides a context between Component relationship with parent and child, and flux elements. This is just a EventEmitter.
AppContextProvider is Container to pass the Dispatcher to child Components.
// example
const Dispatcher = CreateDispatcher('todo')
class RootContainer extends AppContextProvider { }
document.addEventListener('DOMContentLoaded', e => {
render(
<RootContainer dispatcher={Dispatcher}>
<SomeNiceComponent />
</RootContainer>
, document.getElementById('amamori-example'))
})Component
Component extends React.Component.
You can declare the stores as static method names storeTypes.
Every store will attach components state automatically.
You'll basically implement the logic to initialize on componentDidMount. If you'd like to use componentWillMount don't forget to call super function.
You might want to use loadingView and view method instead of render. loadingView will called when declared stores in initializing.
// example
class HogeComponent extends Component {
static get storeTypes() { return [SomeNiceStore] }
componentDidMount() {
ActionCreator.initialize(this)
}
loadingView() {
return (<div>now loading...</div>)
}
view() {
return (<div>{this.state.somenice.greet}</div>)
}
}Store
const NiceRecord = Immutable.Record({greet: '', name: ''})
export class NewTodoStore extends Store {
static get stateType() { return NiceRecord }
observeres(subscribe) {
subscribe('newtodo:content:changes', (key, value) => {
this.update(state => state.set(key, value))
})
}
}ActionCreator
// writing