我们要构建一个模块,其中包含一个内容显示的表格,然后上面有一个提供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模块化更加清晰,一步一步定义,使整个模块看起来结构比较统一,也更好理解。

更多专业前端知识,请上 【猿2048】www.mk2048.com

React 篇 Search Bar and content Table相关推荐

  1. Search Bar On Browser_4

    Search Bar On Browser 摘要: 本文介绍主流浏览器的搜索引擎插件标准.本文还解释如何在浏览器的添加搜索引擎插件. 本文内容: 简介 一.       Sherlock标准 二.   ...

  2. vue商城项目源码_CMS全栈项目之Vue和React篇(下)(含源码)

    今天给大家介绍的主要是我们全栈CMS系统的未讲解完的后台部分和前台部分,如果对项目背景和技术栈不太了解,可以查看我之前的文章 基于nodeJS从0到1实现一个CMS全栈项目(上) 基于nodeJS从0 ...

  3. 前端面试 React篇(上)

    一.组件基础 1. React 事件机制 <div onClick={this.handleClick.bind(this)}>点我</div> React并不是将click事 ...

  4. 前端学习之React篇-(1)最简React——Html直接引用React

    当新手想看看React是什么样的,语法是什么样的,那么这里给出了一个最简单的使用React的方法--就是在html页面中直接引入React的js文件,然后在这个html中直接写react的js即可,简 ...

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

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

  6. 看完这篇文章保你面试稳操胜券——React篇

    ✨ 进大厂收藏这一系列就够了,全方位搜集总结,为大家归纳出这篇面试宝典,面试途中祝你一臂之力!,共分为四个系列 ✨ 本 篇 为 < 看 完 这 篇 文 章 保 你 面 试 稳 操 胜 券 > ...

  7. 第 6 节:前端面试指南 — React 篇(附面试题答案)

    更新完「Vue篇」之后,上周的出差去了一趟南京,很多读者朋友都在微信催更了. 前 5 期没看的同学,建议先看完再来看这一期的,传送门: 第 1 期:「简历篇」含简历模板文件 第 2 期:「HTML篇」 ...

  8. 前端知识体系(7)-react篇

    1.什么是 React React是一个简单的javascript UI库,用于构建高效.快速的用户界面.它是一个轻量级库,因此很受欢迎.它遵循组件设计模式.声明式编程范式和函数式编程概念,以使前端应 ...

  9. react在线浏览doc_CodeMirror代码编辑器(react篇)

    简介 CodeMirror 是一款在线的支持语法高亮的代码编辑器,官网地址:https://codemirror.net/ 安装 npm install react-codemirror2 codem ...

最新文章

  1. 一文了解四种软件架构:Serverless架构、微服务架构、分布式架构、单体架构
  2. webcdn故障处理一例
  3. xmanager 开启X11转发失败问题解决
  4. python的序列包括什么_一文读懂什么是序列 (sequence)
  5. apache phoenix 安装试用
  6. 获取昨天凌晨毫秒数_Java 获取当前时间距离当天凌晨的秒数
  7. C语言中二维数组移动一行,二维数组对每一行进行排序。。
  8. 黑马程序员—————— 随机访问流
  9. ubuntu18.04 pcl1.9需要的依赖库
  10. 解决NuGet加载或下载资源慢的问题
  11. 拓端tecdat:R语言集成模型:提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据
  12. SQL Server维护工作详解
  13. 步进电机驱动实验(89C51 + KEIL + Proteus)
  14. android 卡片消息,安卓QNotified 支持xml卡片QQ消息 - 陌路人博客
  15. ICML 2022 | 稀疏双下降:网络剪枝也能加剧模型过拟合?
  16. 函数声明应该写在什么位置?main函数里面还是前面?(都可以,只要在调用语句的前面即可)
  17. 西数trex自动版u盘版_当移动硬盘遇上它,改变生活:西数My Passport随行版
  18. Python 云标签——玩点浪漫!
  19. R2DBC Unable to create a ConnectionFactory for ‘ConnectionFactoryOptions
  20. “四大发明”活字印刷当排首位!

热门文章

  1. ant 走马灯面板指示显示不出来_触摸屏报警信息显示设置方法
  2. php7 php5.6 array,[转]php5.6 升级到php7及变化
  3. C++一天一个程序(七)
  4. python3开发工具推荐_python开发工具有哪些?我推荐这5款python开发工具!
  5. day10T1改错记
  6. 本周学习总结JAVA
  7. python基础-网络基础知识和网络编程
  8. servle 3.0 新特性之一 对上传表单的支持
  9. 关于phpcmsv9更新缓存出现链接被重置的问题
  10. Silverlight学习笔记(九)-----RenderTransform特效【五种基本变换】及【矩阵变换MatrixTransform】...