This commit is contained in:
Rico Sta. Cruz 2015-02-26 02:46:18 +08:00
parent 226cd6c430
commit 393d6d3a50
2 changed files with 128 additions and 0 deletions

13
es6.md
View File

@ -105,6 +105,9 @@ import Express from 'express';
// aka: indent = require('...').indent // aka: indent = require('...').indent
import { indent } from 'helpers'; import { indent } from 'helpers';
// aka: indent = require('...').indentSpaces
import { indentSpaces as indent } from 'helpers';
``` ```
### Module exports ### Module exports
@ -199,6 +202,16 @@ class Circle extends Shape {
} }
``` ```
### [For..of iteration](http://babeljs.io/docs/learn-es6/#iterators-for-of)
```
for (var i of iterable) {
// ...
}
```
Works for Arrays and iterables (eg, generators).
## Experimental ## Experimental
Available via 6to5's experimental mode Available via 6to5's experimental mode

115
flux.md Normal file
View File

@ -0,0 +1,115 @@
---
title: Flux
layout: default
---
## Architecture
You have:
* __Dispatchers__ receive *actions* that get dispatched to its listeners.
* __Stores__ are objects that store data, usually changed from a dispatcher listener.
* __Views__ are React components that listen to Store changes, or emit *actions* to the dispatcher.
## Dispatcher
A dispatcher emits (`.dispatch()`) events to its listeners (`.register(fn)`).
```js
var Dispatcher = require('flux').Dispatcher;
d = new Dispatcher()
// send a message
d.dispatch({ a: 'aaa', ... };
// receive
token = d.register(function (payload) {
payload.a === 'aaa'
})
```
### Ensuring order
You can ensure one listener is fired after another using `.waitFor()`.
```js
token1 = d.register(...);
token2 = d.register(function (payload) {
// ensure receiver 1 is fired before this
// can only be used within register(...)
d.waitFor([ token1 ])
})
```
### Subclassing
`Object.assign` is the preferred way to subclass Dispatcher (think `$.extend`).
You can make *action creators*, which are shortcuts for `dispatch()`.
```js
var Dispatcher = require('flux').Dispatcher;
var assign = require('object-assign');
var AppDispatcher = assign({}, Dispatcher.prototype, {
// shortcut for dispatching
handleViewAction: function (action) {
this.dispatch({
source: 'VIEW_ACTION',
action: action
})
}
})
```
## Stores
Stores are just like objects.
```js
var TodoStore = { todos: {} };
```
## Stores and dispatchers
Make Dispatcher and Stores:
```js
d = new Dispatcher();
TabStore = { tab: 'home' };
```
Dispatch events to alter the store:
```js
d.dispatch({ event: 'changeTab', tab: 'timeline' });
d.register(function (data) {
if (data.event === 'changeTab') {
TabStore.tab = data.tab;
}
});
```
## With Components
Components can listen to Dispatchers.
```js
var TodoApp = React.createClass({
componentDidMount: function () {
AppDispatcher.register(...);
}
});
```
### Also see
* [Dispatcher API](http://facebook.github.io/flux/docs/dispatcher.html#content)
* [React](react.html)