reflux react 例子
来源:互联网 发布:java获取微信签名 编辑:程序博客网 时间:2024/06/05 06:18
前端使用了reflux react
后端用的是express mongoose 来写的api接口。
//创建动作var TodoActions=Reflux.createActions(['getAll','addItem','deleteItem','updateItem']);var TodoStore=Reflux.createStore({items:[],listenables:[TodoActions],onGetAll:function(data){console.log('onGetAll id=',data);$.get('http://localhost:3001/todo',data,function(res){console.log(res);if(res.data.length>0){this.items=res.data;this.trigger(this.items)}}.bind(this))},onAddItem:function(model){console.log('onAddItem',model);$.post('http://localhost:3001/todo',model,function(res){console.log(res);if(res.data){ this.items.push(res.data);this.trigger(this.items);}}.bind(this))},onDeleteItem:function(model){console.log('deleteItem',model);$.get('http://localhost:3001/todo/delete/'+model._id,model,function(res){console.log(res);if(res.data.ok){this.itemdelete(model)this.trigger(this.items)}}.bind(this))},onUpdateItem:function(model){console.log('onUpdateItem',model);$.post('http://localhost:3001/todo/'+model._id,model,function(res){console.log(res);this.itemupdate(model._id,model);this.trigger(this.items)}.bind(this))},itemdelete:function(model){var index=0;for(var i=0;i<this.items.length;i++){if(this.items[i]._id==model._id){index=i;}}this.items.splice(index,1);},itemupdate(id,model){for(var i=0;i<this.items.length;i++){if(this.items[i]._id==id){this.items[i].name=model.name;this.items[i].age=model.age;}}}})//函数内对数据进行过滤。return 真表示显示。//list 表示数据存在state.list内var TodoComponent=React.createClass({mixins:[Reflux.connectFilter(TodoStore,'list',function(list){console.log(list);return list.filter(function(item){return item.age >0;})})],getInitialState:function(){return {list:[],obj:{name:'',age:''}}},componentDidMount:function(){ TodoActions.getAll({pid1:123,pid2:141});},onChangeText:function(ev){//this.setState({text:ev.target.value});//最新的refs获取标签不需要getDOMNode()了this.setState({obj:{name:this.refs.reftext.value}})},addItem:function(model){TodoActions.addItem(model);},deleteItem:function(model){TodoActions.deleteItem(model);},updateItem:function(model){//console.log('delete',model)TodoActions.updateItem(model);},render:function(){var els=[];this.state.list.map(function(item,index){els.push(<ItemCom data={item} key={item._id} fndelete={this.deleteItem} fnupdate={this.updateItem}/>)}.bind(this))return ( <div> {els} <ItemComAdd fnadd={this.addItem}/> </div>);}})var ItemComAdd=React.createClass({getInitialState:function(){return {name:'',age:''}},onChangeText:function(){this.setState({name:this.refs.refname.value,age:this.refs.refage.value})},onAddItem:function(){this.props.fnadd(this.state);this.setState({name:'',age:''});},render:function(){return (<div>name:<input type="text" value={this.state.name} onChange={this.onChangeText} ref="refname" /> <br/>age:<input type="number" value={this.state.age} onChange={this.onChangeText} ref="refage" /> <button onClick={this.onAddItem}>添加</button></div>);}})var ItemCom=React.createClass({getInitialState:function(){return {name:'',age:'',hide:0,_id:this.props.data._id}},onDelete:function(){this.props.fndelete(this.props.data);},onUpdate:function(){this.setState({hide:1,name:this.props.data.name,age:this.props.data.age});},onChangeText:function(){this.setState({name:this.refs.refname.value,age:this.refs.refage.value})},onUpdatePost:function(){this.props.fnupdate(this.state);this.setState({hide:0})},render:function(){var stylediv={display:this.state.hide==1?'none':'block'};var stylediv1={display:this.state.hide==1?'block':'none'};return (<div><div style={stylediv}>name:<span>{this.props.data.name}</span> age:<span>{this.props.data.age}</span><button onClick={this.onDelete}>delete</button><button onClick={this.onUpdate}>修改</button></div><div style={stylediv1} ><input type="text" value={this.state.name} ref="refname" onChange={this.onChangeText} /><input type="number" value={this.state.age} ref="refage" onChange={this.onChangeText} /><button onClick={this.onUpdatePost}>修改</button></div></div>);}})ReactDOM.render(<TodoComponent />,document.getElementById('app'))
在store上编写了获取 删除 修改 添加的方法。并同步到服务器。
在请求完成后才执行的修改store上数据和触发trigger 回调。
在组件内过滤掉了age<0 的。
组件方法内操作数据都通过动作方法实现的。
组件内有两个子组件,一个是对数据的修改和删除,一个是添加。
store只绑定在了顶级组件上,动作也是。
子组件的数据和方法通过 props传递的。子组件有自己的状态。
这样实现了数据和动作只在顶级组件上绑定。子级都是继承下来的。
子级不用再去实现数据和动作了。它只需使用传递的数据和方法就可以了。
这样也好管理。
0 0
- reflux react 例子
- React Reflux
- React Reflux
- react爬坑记16---reflux
- react ReFlux细说
- Reflux
- Reflux
- reflux+react web 第一种写法
- reflux+react web 第二种写法
- reflux+react web 第三种写法
- reflux+react web 第四种写法
- reflux+react web 第五种写法
- Reflux:基于React的应用架构
- React+Reflux 实现组件间通信
- React-基于React & Reflux 的评论框组件 (ES6)
- React 例子
- ReFlux详解
- Reflux详解
- 面向对象的六大原则之 —— 依赖倒置原则
- ARM Linux 3.x的设备树(Device Tree)
- Oracle 11g必须开启的服务及服务详细介绍
- UGUI源码学习之初涉Image(一)
- POJ 2728 Desert King(01分数规划+二分+最小生成树-Prim)
- reflux react 例子
- 利用css实现文本超出N行之后显示省略号等css常用小知识点
- String,Stringbuffer,StringBuilder
- 如何更改Eclipse的workspace路径
- 类基础
- BP神经网络
- 扫描输入--来自《Java编程思想第四版》第13章
- 61.View the Exhibit and examine the structure of the PROMOTIONS table.
- 什么是I帧,P帧,B帧