React学习——ListView(Reflux)

接前一篇,把前面的ListView改成Reflux的形式

 
   var BookActions=Reflux.createActions([
            'fetchList'
        ]);
    var BookStore = Reflux.createStore({
        listenables: [BookActions], 
        bookList:['item1','item2','item3'], 
        init:function () {
            this.fetchList();
            console.log('init done.');
        },
        fetchList:function(){
            this.bookList.push('item'+(this.bookList.length+1)); 
            console.log('fetchList'+this.bookList.length);
            this.trigger(this.bookList);
        }
    });

    var TextItem = React.createClass({
        render:function(){
            var item = this.props.item;
            return <p>this is {item}</p>
        }
    });

    var Template = React.createClass({
        render:function(){
            return React.createElement(this.props.type,this.props);
        }
    });

    var ListViewItem = React.createClass({  
        render:function(){
            var item = this.props.item;
            var cls = this.props.isSelected?'selected':'';
            if(this.props.template){ 
                return <li className={cls} onClick={this.props.onClick}><Template type={this.props.template} item={item}></Template></li>;
            }else{
                return <li className={cls} onClick={this.props.onClick}>{item}</li>;
            } 
        }
    }); 

    var ListView = React.createClass({
        mixins: [Reflux.connect(BookStore, 'bookstore')], 
        onSelect:function(item){
            this.setState({selectedItem:item});
            console.log('selected item:' + item);
        },
        render: function() { 
            var itemTemplate = this.props.itemTemplate?this.props.itemTemplate:'';
            var selectedItem = this.state.selectedItem; 
            console.log('state:' + this.state);

            for(var key in this.state){
                console.log('key='+key);
            }

            if(this.state.bookstore){
                var items = this.state.bookstore?this.state.bookstore:[];
                console.log('render items:' +this.state.bookstore + '-' + items.length);
                return (
                    <ol>
                    {
                        items.map(function (item,i) { 
                            var isSelected = (item ==selectedItem);
                            return <ListViewItem key={i} item={item} template={itemTemplate} isSelected={isSelected} onClick={this.onSelect.bind(this,item)}></ListViewItem>
                        },this)
                    }
                    </ol>
                );
            }else{
                return <ol></ol>;
            }
        }
    }); 

    React.render(
        <div>
        <button onClick={BookActions.fetchList}>加一个</button>
        <ListView itemTemplate={TextItem}>
            </ListView>
            </div> ,
    document.body
    ); 

    BookActions.fetchList();

 

转载于:https://www.cnblogs.com/abiho/p/4567250.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值