$ cnpm install fluxible
Pluggable, singleton-free container for isomorphic Flux applications.
$ npm install --save fluxible
Join the #fluxible channel of the Reactiflux Discord community.
import Fluxible from 'fluxible';
import {createStore} from 'fluxible/addons';
import {
connectToStores,
createElementWithContext,
provideContext
} from 'fluxible-addons-react';
import React from 'react';
import ReactDOM from 'react-dom/server';
// Action
const action = (actionContext, payload) => {
actionContext.dispatch('FOO_ACTION', payload);
};
// Store
const FooStore = createStore({
storeName: 'FooStore',
handlers: {
'FOO_ACTION': 'fooHandler'
},
initialize: function () { // Set the initial state
this.foo = null;
},
fooHandler: function (payload) {
this.foo = payload;
},
getState: function () {
return {
foo: this.foo
}
}
});
// Component
class App extends React.Component {
render() {
return <span>{this.props.foo}</span>
}
}
App = provideContext(connectToStores(App, [FooStore], (context, props) => {
return context.getStore(FooStore).getState();
}));
// App
const app = new Fluxible({
component: App,
stores: [FooStore]
});
// Bootstrap
const context = app.createContext();
context.executeAction(action, 'bar', (err) => {
console.log(ReactDOM.renderToString(createElementWithContext(context)));
});
Fluxible is written with ES2015 in mind and should be used along with polyfills for features like Promise
and Object.assign
in order to support all browsers. We recommend using Babel along with its polyfill.
This software is free to use under the Yahoo Inc. BSD license. See the LICENSE file for license text and copyright information.
Copyright 2014 - 2016 © taobao.org |