用react 组件实现列表的展示,增加,删除,位置的移动操作
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>列表操作</title> <script src="js/react.js"></script> <script src="js/react-dom.js"></script> <script src="js/browser.min.js"></script> <script src="js/jquery-1.7.2.min.js"></script> </head> <body> <h3>类别枚举:</h3> <p> 家用视听设备及相关配件, 冰箱洗衣机及相关配件, 空调及相关配件, 厨房卫浴电器, 电脑, OA办公, 3C配件, 数字应用, 房产, 美妆, 公益, 运动户外, 家装建材及五金, 生活日用家庭清洁, 宠物/宠物食品及用品, 家纺, 食品及酒水, 礼品, 母婴, </p> <div id="GoodsClassify"></div> <script type="text/babel"> var GoodsClassify=React.createClass({ getInitialState:function(){ var dataList=[{"dirId":"101100100100","dirName":"家用视听设备及相关配件","pid":"000000000000","mainDirId":"101100100100","lev":1,"icon":null,"sort":-1},{"dirId":"102100100100","dirName":"冰箱洗衣机及相关配件","pid":"000000000000","mainDirId":"102100100100","lev":1,"icon":null,"sort":-1},{"dirId":"103100100100","dirName":"空调及相关配件","pid":"000000000000","mainDirId":"103100100100","lev":1,"icon":null,"sort":-1},{"dirId":"104100100100","dirName":"厨房卫浴电器","pid":"000000000000","mainDirId":"104100100100","lev":1,"icon":null,"sort":-1},{"dirId":"105100100100","dirName":"电脑","pid":"000000000000","mainDirId":"105100100100","lev":1,"icon":null,"sort":-1},{"dirId":"106100100100","dirName":"OA办公","pid":"000000000000","mainDirId":"106100100100","lev":1,"icon":null,"sort":-1},{"dirId":"107100100100","dirName":"3C配件","pid":"000000000000","mainDirId":"107100100100","lev":1,"icon":null,"sort":-1}]; return { dataList:dataList } }, addList:function(list){ this.setState({ dataList:list }) }, render:function(){ return( <div> <GoodsList dataList={this.state.dataList} /> <AddGoodsClass dataList={this.state.dataList} addlist={this.addList}/> </div> ) } }); var AddGoodsClass=React.createClass({ handleChange:function(){ var dataList=this.props.dataList; dataList.push({dirName:this.refs.inputNode.value}); this.props.addlist(dataList) }, render:function(){ return ( <div> <input ref="inputNode" type="text"/><button onClick={this.handleChange}>添加</button> </div> ) } }); var GoodsDl=React.createClass({ getInitialState:function(){ return {} }, componentDidMount:function(){ //this.getDOMNode() or ReactDOM.findDOMNode(this)//初次渲染调用一次 }, componentWillUpdate:function(){//初次渲染不调用,状态更新时调用 }, deleteRecord:function(){ this.props.data.splice(this.props.index,1); this.props.onUpdate(this.props.data); }, movetoprev:function(){ if(this.props.index==0) return false; var ele=this.props.data.splice(this.props.index,1)[0]; var previndex=this.props.index-1; this.props.data.splice(previndex,0,ele); this.props.onUpdate(this.props.data) }, movetonext:function(){ var ele=this.props.data.splice(this.props.index,1)[0]; var previndex=this.props.index+1; this.props.data.splice(previndex,0,ele); console.log(this.props.data.length); this.props.onUpdate(this.props.data) }, render:function(){ var o=this.props.obj; return ( <dl> <dt> {o.dirName} <button className="delete" onClick={this.deleteRecord}>删除</button> <button className="movetoprev" onClick={this.movetoprev}>上移</button> <button className="movetonext" onClick={this.movetonext}>下移</button> </dt> </dl> ) } }); var GoodsList=React.createClass({ getInitialState:function(){ return { dataList:this.props.dataList } }, handleChange:function(data){ this.setState(function(){ dataList:data }) }, componentDidMount:function(){ this.state.dataList.map(function(i){ console.log(i.dirName+',') }) }, render:function(){ var data=this.state.dataList; var list=data.map(function(o,i){ return <GoodsDl key={i} obj={o} data={data} index={i} onUpdate={this.handleChange} /> }.bind(this)); return <div>{list}</div> } }); ReactDOM.render( <GoodsClassify />, document.getElementById('GoodsClassify') ); </script> </body> </html>