react实现简单表格过滤组件

1.index.html

<!DOCTYPE html>
<html>
  <head>
    <style>
      input{
        border:5px solid #b5dad7;
        height:50px;
        width:452px;
        text-align:center;
      }
      td{
        border:1px solid grey;
        width:150px;
        height:40px;
        text-align:center;
      }
      th{
        border:1px solid grey;
        width:150px;
        height:40px
      }
      .centerDiv{
        width:100%
      }
    </style>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link href="https://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
    <link href="/index.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/react/15.6.1/react.min.js"></script>
    <script src="https://cdn.bootcss.com/react/15.6.1/react-dom.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>
    <script src="index.js" type="text/babel"></script>
  </head>
    <body>
                    <div  id="tableList" class="centerDiv">
      </div>
    </body>
</html>

2.index.js

 var tableSrc = {
      columns: [
        {title: "名称", data: "name", type: "text",},
        {title: "价格", data: "price", type: "number", editor: {}, query: true},
        {title: "销量", data: "sales", type: "number", editor: {}, query: true},
      ],
      data:[
        {
        "name": "电锅",
        "price":100,
        "sales":1000,
      },
        {
        "name":"电锅",
        "price":100,
        "sales":1000,
      },
        {
        "name":"电水壶",
        "price":100,
        "sales":9100,
      },
      {
        "name":"电热毯",
        "price":100,
        "sales":1800,
      },
      {
        "name":"搅拌机",
        "price":100,
        "sales":134500,
      },
      {
        "name":"烤箱",
        "price":100,
        "sales":1300,
      },
      {
        "name":"开水机",
        "price":100,
        "sales":13400,
      },
      ]
    }

var TableList = React.createClass({
  getInitialState: function() {
    return {
      value: ‘‘,
      srcData:this.props.srcData,
      data:this.props.srcData.data,
            };
  },
  handleChange: function(event) {
    var srcData = this.props.srcData;
    var data =this.state.data;
    var display = [];
    var select = event.target.value;
    data.forEach(function(x){
      if(x.name.indexOf(select)>-1){
        display.push(x)
      }
    })
    srcData.data = display
    this.setState({srcData: srcData,value:select});
  },
  render: function() {
    var value = this.state.value;
    var srcData = this.state.srcData;
    return (
     <div id="searchTable">
       <input type="text" value={value} className="inputborder" onChange={this.handleChange} placeholder = "搜索商品"  />
          <Table srcData={srcData} />
     </div>
    )
  }
});

var Table = React.createClass({
  render: function() {
    return(
    <table style={{border: 1 }}>
      <Thcell columns={this.props.srcData.columns} />
      <Cell columns = {this.props.srcData.columns}  data = {this.props.srcData.data} />

    </table>
    )
  }
});

var Thcell = React.createClass({
  render: function() {
    var self =this;
    if(self.props.columns.length){
      var ths = self.props.columns.map(function(th){
        return (<th>{th.title}</th>)
      })
    }
    return(
      <thead>
        <tr>
                                {ths}
        </tr>
      </thead>
    )
  }
});

var Cell = React.createClass({
  render: function() {
     var self = this;
           if(this.props.data.length){
                  var rows = self.props.data.map(function(datarow){
                     var    tds = [];
                          for(var i in self.props.columns){
                                  tds.push(<td>{datarow[self.props.columns[i].data]}</td>)
                            }
                            return (<tr>{tds}</tr>)
                    })
         }else{

      }
      return(
        <tbody>
        {rows}
        </tbody>
    )
 }
});

ReactDOM.render(
  <TableList srcData={tableSrc} />,
  document.getElementById(‘tableList‘)
);
时间: 2024-10-10 17:39:44

react实现简单表格过滤组件的相关文章

【React源码分析】组件通信、refs、key和ReactDOM

React源码系列文章,请多支持:React源码分析1 - 组件和对象的创建(createClass,createElement)React源码分析2 - React组件插入DOM流程React源码分析3 - React生命周期详解React源码分析4 - setState机制React源码分析5 -- 组件通信,refs,key,ReactDOMReact源码分析6 - React合成事件系统 1 组件间通信 父组件向子组件通信 React规定了明确的单向数据流,利用props将数据从父组件传

基于Vue.js的表格分页组件

BootPage组件简介 其实也不是啥高大上的组件了,相反确实一个简单的表格分页组件而已,主要是自己最近项目中需要一个表格分页组件,而Vue官方组件库里分页组件都功能太强大或者没有适合我的,所以就自己写了一个凑合着用,或许有人和我一样需要这样一个简单的分页组件来实现简单的分页功能,我便在这里分享一下,大家自觉填坑咯. 如需高大上的组件,可以移步Vue官方组件库:https://github.com/vuejs/awesome-vue#libraries--plugins BootPage是一款支

推荐 11 款 React Native 开源移动 UI 组件

推荐 11 款 React Native 开源移动 UI 组件 oschina 发布于 10个月前,共有 14 条评论 本文推荐 11 个非常棒的 React Native 开源组件,希望能给移动应用开发者提供帮助. React Native 是近期 Facebook 基于 MIT 协议开源的原生移动应用开发框架,已经用于 Facebook 的生产环境.React Native 可以使用最近非常流行的 React.js 库来开发 iOS 和 Android 原生 APP. 1. iOS 表单处理

Vue.js的表格分页组件

转自:http://www.cnblogs.com/Leo_wl/p/5522299.html 有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更一篇文章,分享一个自己编写的一个Vue的小组件,名叫BootPage. 不了解Vue.js的童鞋可以移步我的上一篇文章<浅谈Vue.js>了解一下. BootPage组件简介 其实也不是啥高大上的组件了,相反确实一个简单的表格分页组件而已,主要是自己最近项目中需要一个表格分页组件,而Vue官方组件

React 深入系列1:React 中的元素、组件、实例和节点

文:徐超,<React进阶之路>作者 授权发布,转载请注明作者及出处 React 深入系列,深入讲解了React中的重点概念.特性和模式等,旨在帮助大家加深对React的理解,以及在项目中更加灵活地使用React. React 中的元素.组件.实例和节点,是React中关系密切的4个概念,也是很容易让React 初学者迷惑的4个概念.现在,老干部就来详细地介绍这4个概念,以及它们之间的联系和区别,满足喜欢咬文嚼字.刨根问底的同学(老干部就是其中一员)的好奇心. 元素 (Element) Rea

React的单向数据流与组件间的沟通

今天来给大家总结下React的单向数据流与组件间的沟通. 首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则. 先介绍单向数据流吧. React单向数据流: React是单向数据流,数据主要从父节点传递到子节点(通过props). 如果顶层(父级)的某个props改变了,React会重渲染所有的子节点. 刚才我们提到了Props,怎么理解Props呢? Props:  props是property的缩写,可以理解为HTML标签的attribute. 不可以使用this.p

深入解析React中的元素、组件、实例和节点

React 深入系列,深入讲解了React中的重点概念.特性和模式等,旨在帮助大家加深对React的理解,以及在项目中更加灵活地使用React. React 中的元素.组件.实例和节点,是React中关系密切的4个概念,也是很容易让React 初学者迷惑的4个概念.现在,我就来详细地介绍这4个概念,以及它们之间的联系和区别,满足喜欢咬文嚼字.刨根问底的同学的好奇心. 元素 (Element) React 元素其实就是一个简单JavaScript对象,一个React 元素和界面上的一部分DOM对应

React Hooks简单业务场景实战(非源码解读)

前言 React Hooks 是React 16.7.0-alpha 版本推出的新特性.从 16.8.0 开始,React更稳定的支持了这一新特性. 它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性. 注意:React 16.8.0 是第一个支持 Hook 的版本.升级时,请注意更新所有的 package,包括 React DOM.React Native 将在下一个稳定版本中支持 Hook. 如果说promise是JavaScript异步的终极解决方案,那

如何使用React.lazy和Suspense进行组件延迟加载

#JAVASCRIPT 如何使用React.lazy和Suspense进行组件延迟加载 向你的粉丝发推文 通过电子邮件发送给朋友 与你的朋友分享 作者:Boris Sever React 16.6将代码分割带到了一个新的水平.您现在可以在真正需要时加载组件,而无需安装其他库. 什么是代码分裂和延迟加载? Webpack将代码分割定义为: “将代码拆分为各种捆绑的技术,然后可以按需加载或并行加载”.[ 来源 ] 另一种说法是:“按需加载或并行加载 ”是延迟加载.与懒惰加载相反的是急切加载.无论您是