我们要构建一个模块,其中包含一个内容显示的表格,然后上面有一个提供Search的栏位,并对Search中输入栏进行监听,当有改变的时候,触发Search然后对内容表中的内容进行过滤。

Demo Link:http://czrmodel.mybluemix.net/catalog.html  (顺带推广一下IBM Bluemix,是IBM云,目前全免费哦,跟aliyun不一样的,Bluemix里面自带很多服务,不需要自己搭应用服务器和DB, aliyun直接给你一台虚拟机,然后通过ssh链接或者vpn链接,所有的服务都要自己安装。aliyun自己需要做的东西稍微多些,Bluemix封装好的服务更多一些。大家看自己的情况去选吧,对于想做尝试和学习的朋友还是用免费的Bluemix吧,当你真正想部署环境的话,还是应该考虑aliyun,因为毕竟他属于国内的服务器,网速快一些。)

这是一个使用率很高的组件。我们先看一下最终效果图。

内容json

var data=[
          {"category": "Sporting Goods", "price": "$49.99", "stocked": true, "name": "Football"},
          {"category": "Sporting Goods", "price": "$9.99", "stocked": true, "name": "Baseball"},
          {"category": "Sporting Goods", "price": "$29.99", "stocked": false, "name": "Basketball"},
          {"category": "Electronics", "price": "$99.99", "stocked": true, "name": "iPod Touch"},
          {"category": "Electronics", "price": "$399.99", "stocked": false, "name": "iPhone 5"},
          {"category": "Electronics", "price": "$199.99", "stocked": true, "name": "Nexus 7"}
        ];

整体结构:

    <div className="fitlerProductTable" >
                  <SearchBar filterText={this.state.filterText}  inStockOnly={this.state.inStockOnly} onUserInput={this.handleUserInput}/> //蓝色框
                  <ProductTable data={this.props.data}  filterText={this.state.filterText} inStockOnly={this.state.inStockOnly} />  //绿色框
                </div>

针对SearchBar

    <div className="SearchBar">
                    <input type="text" ref="filterTextInput"  placeholder="Search..." value={this.props.filterText} onChange={this.handleChange}/>
                    <p><input type="checkbox" ref="inStockOnly" checked={this.props.inStockOnly} onChange={this.handleChange}></input>
                    Only show products in stock</p>
                </div>

针对 ProductTable

  <table className="productTable">
          <thead>
          <tr><th>Name</th><th>Price</th></tr>
          {itemsList}    
          </thead>
        </table>

itemList :

var cata=null;
        var itemsList=[];
        var a=this.props.filterText;
        this.props.data.forEach(function(item){
        
            if(item.name.indexOf(this.props.filterText) ==-1 || (this.props.inStockOnly && !item.stocked)){
                return;
            }
            if(item.category !=cata){
                cata=item.category;
                itemsList.push(<CataRow catagory={cata}/>);
            }
            itemsList.push(<ProductRow productName={item.name} price={item.price} stocked={item.stocked}/>);
        },this);

其实也不是说其他框架不能实现,只是觉得React模块化更加清晰,一步一步定义,使整个模块看起来结构比较统一,也更好理解。

React 篇 Search Bar and content Table的更多相关文章

  1. iOS Search bar 输入空字符串也可以搜索

    Search bar delegate - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { UITextField *sea ...

  2. Android UI开发第二十四篇——Action Bar

    Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为acti ...

  3. 【转】Android UI开发第二十四篇——Action Bar

    Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为acti ...

  4. Salesforce 大数据量处理篇(一)Skinny Table

    本篇参考:https://developer.salesforce.com/docs/atlas.en-us.salesforce_large_data_volumes_bp.meta/salesfo ...

  5. 前端面试题整理—React篇

    1.说一下React React是Facebook 开发的前端JavaScript库 V层:react并不是完整的MVC框架,而是MVC中的C层 虚拟DOM:react引入虚拟DOM,每当数据变化通过 ...

  6. react ,ant Design UI中table组件合并单元格并展开详情的问题

    需求:购物车订单列表,如图: 一:单元格合并 遇到这种你会怎么办呢?  单元格合并?  还是其他的方法? 下面是我的处理方式,就是在table 组件的columns上处理,这里拿商品举例,其余的类似, ...

  7. React篇-子组件调用父组件方法,并传值

    react 中子组件调用父组件的方法,通过props: 父组件: isNote(data){} <div className="tabC01"> <FTab ta ...

  8. flask第二十八篇——HTML【1】table标签

    请关注公众号:自动化测试实战 以下内容参考:http://www.w3school.com.cn/tags/tag_table.asp <!DOCTYPE html> <html l ...

  9. React 篇 Comment Model

    Model 原型 Comment Box <div className="commentBox"> <h1>Comments</h1> < ...

随机推荐

  1. MongoDB小结15 - find【查询条件$ne】

    $ne表示不相等 db.user.find({"name":{"$ne":"william"}})

  2. 使用URL Rewrite实现网站伪静态

    下载urlwrite包 将urlrewrite-***.jar复制到web应用lib文件夹下 web.xml中配置URL Rewrite: 例: <filter> <filter-n ...

  3. Nginx+Tomcat+Memcached负载均衡和session共享

    1. 演示搭建 说明:本文参考网络日志http://blog.csdn.net/remote_roamer/article/details/51133790,结合实际操作,仅做个演示记录. 1.1.  ...

  4. JAVA WEB接口开发简述

    目录 1. JAVA WEB接口开发简述 1.1. 基本了解 1.2. 提供接口 1.3. 调用接口 1. JAVA WEB接口开发简述 1.1. 基本了解 当我们想去访问其他网站的接口时候,而又不想 ...

  5. flask应用的分页

    Flask-SQLAlchemy支持分页 https://www.jianshu.com/p/5e03cd202728

  6. 一句话创建Jupyter For TensorFlow

    docker run -v /home/jupyter_files:/home/jovyan/work -it -d --rm -p 10082:8888 jupyter/tensorflow-not ...

  7. mysql查看所有存储过程,函数,视图,触发器,表

    查询数据库中的存储过程和函数 方法一: select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE' ...

  8. c# 获取根节点的属性信息

    <?xml version="1.0" encoding="UTF-8"?> <!--课程封面信息 --> <GK version ...

  9. 【codevs2011】【LNOI2013】最小距离之和

    floyed水题 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstr ...

  10. HDU 4850 Wow! Such String!(欧拉道路)

    HDU 4850 Wow! Such String! 题目链接 题意:求50W内的字符串.要求长度大于等于4的子串,仅仅出现一次 思路:须要推理.考虑4个字母的字符串,一共同拥有26^4种,这些由这些 ...