标签:
今天我们来结合一个简单的Demo来讲解Flux框架,让大家了解Flux框架的真面目。
先上一张比较漂亮的图(对漂亮的图,总是没有抵抗力:-) )。
createNewItem: function (event) {
ButtonActions.addNewItem('new item');
},
var items = this.state.items;
var itemHtml = items.map(function (listItem, i) {
return <li key={i}>{listItem}</li>;
});
render: function() {
return
<div>
<ul>{itemHtml}</ul>
<button onClick={this.createNewItem}>New Item</button>
</div>;
}var ButtonActions = {
addNewItem: function (text) {
AppDispatcher.dispatch({
actionType: 'ADD_NEW_ITEM',
text: text
});
},
};ADD_NEW_ITEM
UPDATE_ITEM
DELETE_ITEM
AppDispatcher.register(function (action) {
switch(action.actionType) {
case 'ADD_NEW_ITEM':
ListStore.addNewItemHandler(action.text);
ListStore.emitChange();
break;
case 'UPDATE_ITEM':
...
break;
case 'DELETE_ITEM':
...
break;
default:
}
})Dispatcher收到ADD_NEW_ITEM动作,就会执行回调函数,对ListStore进行操作。var EventEmitter = require('events').EventEmitter;
var assign = require('object-assign');
var ListStore = assign({}, EventEmitter.prototype, {
items: [],
getAll: function () {
return this.items;
},
addNewItemHandler: function (text) {
this.items.push(text);
},
emitChange: function () {
this.emit('change');
},
addChangeListener: function(callback) {
this.on('change', callback);
},
removeChangeListener: function(callback) {
this.removeListener('change', callback);
}
});
module.exports = ListStore;
componentDidMount: function() {
ListStore.addChangeListener(this._onChange);
},
componentWillUnmount: function() {
ListStore.removeChangeListener(this._onChange);
},
_onChange: function () {
this.setState({
items: ListStore.getAll()
});
},《React-Native系列》22、 Flux框架Demo详解
标签:
原文地址:http://blog.csdn.net/codetomylaw/article/details/52287614