React 查找表格数据例子

2023-10-29

假设我们已经有了一个返回 JSON 的 API

[
  {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"}
];

在这里插入图片描述
我们的应用中包含五个组件
FilterableProductTable (橙色): 是整个示例应用的整体
SearchBar (蓝色): 接受所有的用户输入
ProductTable (绿色): 展示数据内容并根据用户输入筛选结果
ProductCategoryRow (天蓝色): 为每一个产品类别展示标题
ProductRow (红色): 每一行展示一个产品

最终的效果
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

import React from 'react';
import { Component } from 'react';
import ReactDom from 'react-dom';
class ProductCategoryRow extends Component {
  render() {
    const category = this.props.category
    return (
      <tr>
        <th colSpan='2'>
          {category}
        </th>
      </tr>
    )
  }
}

class ProductRow extends Component {

  render() {
    const product = this.props.product;
    const name = product.stocked ? product.name : <span style={{ color: 'red' }}> {product.name}</span>
    return (
      <tr>
        <td>{name}</td>
        <td>{product.price}</td>
      </tr>
    )
  }
}
class ProductTable extends Component {
  render() {
    const filterText = this.props.filterText;
    const inStockOnly = this.props.inStockOnly;
    const rows = [];
    let lastCategory = null;
    this.props.products.forEach(product => {
      if(product.name.indexOf(filterText)===-1){
        return;
      }
      if(inStockOnly&&!product.stocked){//等会重新在看下这里的逻辑,还有上面的东西
        return;
      }

      if (product.category !== lastCategory) {

        rows.push(
          <ProductCategoryRow category={product.category} key={product.category} />
        )
      }
      rows.push(
        <ProductRow product={product} key={product.name} />
      )
      lastCategory = product.category;
    });
    return (
      <table>
        <thead>
          <tr>
            <th>Name</th>
            <th>Price</th>
          </tr>
        </thead>
        <tbody>
          {rows}
        </tbody>
      </table>
    );
  }
}
class SearchBar extends Component {
  constructor(props){
    super(props);
    this.handleFilterTextChange = this.handleFilterTextChange.bind(this);
    this.handleInStockChange = this.handleInStockChange.bind(this);
  }
  handleFilterTextChange(e){
     this.props.onFilterTextChange(e.target.value);
  }
  handleInStockChange(e){
    this.props.onInStockChange(e.target.value);
  }
  render() {
    const filterText = this.props.filterText;
    const inStockOnly = this.props.inStockOnly;
    return (
      <from>
        <input type='text' placeholder="Search..." value = {filterText} onChange = {this.handleFilterTextChange} />
        <p>
          <input type='checkbox' checked= {inStockOnly} onChange = {this.handleInStockChange} />
          {' '}
          Only show products in stock
        </p>
      </from>
    )
  }
}

class FilterableProductTable extends Component {
  constructor(props) {
    super(props);
    this.state = {
      filterText: '',
      inStockOnly: false
    }
    this.handleFilterTextChange = this.handleFilterTextChange.bind(this);
    this.handleInStockChange  = this.handleInStockChange.bind(this);
  }
  handleFilterTextChange(filterText){
     this.setState({
       filterText:filterText
     })
  }
  handleInStockChange(inStockOnly){
    this.setState({
      inStockOnly:inStockOnly
    })
  }
  render() {
    return (
      <div>
        <SearchBar filterText={this.state.filterText} inStockOnly={this.state.inStockOnly}   onFilterTextChange={this.handleFilterTextChange}  onInStockChange={this.handleInStockChange}  />
        <ProductTable products={this.props.products} filterText={this.state.filterText} inStockOnly={this.state.inStockOnly} />
      </div>
    )
  }
}
const PRODUCTS = [
  { 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' }
];
ReactDom.render(
  <FilterableProductTable products={PRODUCTS} />, document.getElementById('root')
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React 查找表格数据例子 的相关文章

  • css in js开发利器 - styled-components(样式组件)

    styled components 是一个常见的 css in js 类库 和所有同类型的类库一样 通过 js 赋能解决了原生 css 所不具备的能力 比如变量 循环 函数等 注意 有时候 React 版本和 styled componen
  • react项目中使用react-dnd实现列表的拖拽排序

    现在有一个新需求就是需要对一个列表 实现拖拽排序的功能 要实现的效果如下图 可以通过 react dnd 或者 react beautiful dnd 两种方式实现 今天先讲下使用react dnd是如何实现的 github地址 https
  • 【前端】react-markdown配置解析

    文章目录 react markdown基本配置 同步预览配置 MdEditorComponent js reducer js initBlogState js action types js sync actions js store js
  • 如何在 Ubuntu 20.04 上使用 React 前端设置 Ruby on Rails v7 项目

    作者选择了电子前沿基金会接受捐赠作为为捐款而写程序 介绍 红宝石 on Rails是一个流行的服务器端 Web 应用程序框架 它为当今网络上存在的许多流行应用程序提供支持 例如GitHub Basecamp 声云 Airbnb and Tw
  • Ionic3开发教程 - 开发(2)

    Ionic3开发系列教程Ionic3开发教程 环境准备 1 Ionic3开发教程 开发 2 Ionic3开发教程 发布Android版本 3 Ionic3开发教程 发布IOS版本 4 Ionic3开发教程 更新 5 本文中介绍的Ionic3
  • React页面设计初体验

    1 定制路由 export default login path login name login component layouts BlankLayout routes path login component Login Index
  • 关于Vue.js和React.js,听听国外的开发者怎么说?

    VueJS 与 ReactJS 到底怎么样如何 听听别人怎么说 使用所有新的库和框架 很难跟上所有这些库和框架 也就是说 这就需要您决定哪些是值得花时间的 让我们看看人们说什么 和Vue JS一起工作是很愉快的 我发现学习曲线很浅 然而 这
  • react和react jsx基础

    本文是个人学习笔记 例子都是来自React Native官网 之前不是做前端的 没有使用过react 要学习react native做混合开发 react 包括react jsx还是得补补 react和react jsx react是一个j
  • React(一):React的设计哲学 - 简单之美

    React 一 React的设计哲学 简单之美 React 二 React开发神器Webpack React 三 理解JSX和组件 React 四 虚拟DOM Diff算法解析 React 五 使用Flux搭建React应用程序架构 Rea
  • Umi+Dva初印象<基础应用,结构,流转逻辑>

    目录 前言 知识储备 generator函数 Dva初识 实际交互 函数式组件 class组件 前言 项目初始为umi脚手架进行初始化 lt 初始化过程 http t csdn cn cuTaY gt 工程中加载了umi自带的antd ui
  • useEffect详情用法

    1 为什么要使用useEffect 想必大家都是用过vue吧 在vue框架所写的项目中 我们通过在与后端进行数据交互的过程中 通常都是会在生命周期中进行数据的请求 然后将数据返回给页面进行渲染 在React中我们也是这样 但是在函数式组件中
  • React官方文档--Lifting State Up

    Lifting State Up 如果 几个组件需要同时影响并且修改同一个数据 我们建议将这个共享状态进行提升 给他们最近的共同祖先 在这个部分 我们将要创建一个温度计算器来判断水会不会在给定温度下沸腾 我们将从一个叫做BoilingVer
  • React实现关键字高亮

    先看效果 实现很简单通过以下这个函数 highLight text keyword gt return text split keyword flatMap str gt span keyword span str slice 1 展示某段
  • quill编辑器使用

    官方git https github com quilljs quill 官方文档 https quilljs com 中文文档 https kang bing kui gitbook io quill 编辑器是个正经编辑器 就是文档太不正
  • 【React】 4课 react初识组件

    首先我们如1课创建一个文件夹在文件夹中安装react环境需要的配置文件 npm init y npm i babel standalone D npm i react react dom D 安装配置文件教程链接 https blog cs
  • vue发展历史简介

    基本介绍 Vue 是一套用于构建用户界面的 渐进式框架 与其它大型框架不同的是 Vue 被设计为可以自底向上逐层应用 最初它不过是个人项目 时至今日 已成为全世界三大前端框架之一 github 上拥有 17 8万 Star 领先于 Reac
  • React事件处理及事件流

    React事件处理 React事件处理是通过将事件处理器绑定到组建上处理事件 事件触发的同时更新组建的内部状态 内部状态更新会触发组件的重绘 React 元素的事件处理和 DOM 元素的事件处理很相似 但语法上的略有区别 在React中事件
  • 黑马React:基础拓展

    黑马React D10 基础拓展 Date December 18 2023 useReducer 基础使用 作用 让 React 管理多个 相对关联 的状态数据 补充 和useState的作用类似 用来管理相对复杂的状态数据 特点 use
  • React中渲染html结构---dangerouslySetInnerHTML

    dangerouslySetInnerHTML 胡子 语法绑定的内容全部作为普通文本渲染 渲染html结构基于 dangerouslySetInnerHTML dangerouslySetInnerHTML 是 React 标签的一个属性
  • 如何提高React组件的渲染效率的?在React中如何避免不必要的render?

    面试官 说说你是如何提高组件的渲染效率的 在React中如何避免不必要的render 一 是什么 react 基于虚拟 DOM 和高效 Diff 算法的完美配合 实现了对 DOM 最小粒度的更新 大多数情况下 React 对 DOM 的渲染

随机推荐

  • HDFS--读写测试

    读写测试 1 写测试 2 读测试 3 删除测试文件 1 写测试 cd export servers hadoop 2 6 0 cdh5 14 0 yarn jar share hadoop mapreduce hadoop mapreduc
  • 开发板BMP图片显示(6818开发板)

    BMP图片的前54个字节保存图片信息 不保存像素点 确认图片是不是BMP类型 读取整个图片大 pragma pack 1 typedef struct tagBITMAPFILEHEADER unsigned short bfType 2B
  • HR筛选简历内幕全解析

    我们已经把你的简历放进了公司的 人才库 在准备简历素材 挑选简历格式 着手创作简历的过程中 有一句话 可以用来作为戒条 Your resume is scanned not r ead YRIS 为什么让求职者以此为鉴呢 因为招聘者就是这样
  • 进程和线程的区别

    进程和线程的区别 1 进程和线程的关系和区别 2 线程的状态 3 进程的状态 4 多线程的实现方法 5 使用多线程的优缺点 6 线程的 run 和 start 有什么区别 7 什么是单线程和多线程 前两天面试 被问到进程和线程的区别 由于是
  • STM32F103 TFTLCD显示实验(一)

    文章内容 本文将介绍有关TFTLCD的有关知识 包括几个部分 分别如下 TFTLCD简介 相关指令 配置步骤 FSMC简介 由于篇幅过长 因此 代码讲解放到下一章中 链接如下 STM32F103 TFTLCD显示实验 二 https blo
  • 跑通官方的yolov7-tiny实验记录(yolov7-tiny可作为yolov5s的对比实验网络)

    目录 1 一些可用的参考链接 2 开始训练yolov7 2 1 weights 2 2 cfg 2 3 data 2 4 hyp 2 5 epochs 2 6 batch size 2 7 workers 2 8 name 1 一些可用的参
  • STM8中断的设置(ST Visual Develop和IAR环境下)

    以下以stm8s103为例介绍在ST Visual Develop和IAR环境下的中断设置 这两种只是环境不同其实中断向量是不会变的 先看一下数据手册 再结合芯片手册中中断向量映像表 如下图所示 结合起来的话我们就能够理解的 在用ST Vi
  • this.setState的详细用法

    1 为什么不要直接对state进行赋值 如果直接对this state复制是不会去更新视图的 this setState的原理是同一个队列来实现state的更新的 将需要更新的state放入到状态队列中 在一定时间段之后 合并并更新stat
  • 【计算机网络】网络层协议——IP协议基础教程详解!干货满满

    文章目录 计算机网络 网络层 IP协议详解 IP协议的格式 4位版本号 4位首部长度 8位的服务类型 16位总长度 分包组包 标识 片移量 标志 过程实例 8位生存时间 8位协议 16位首部校验和 源IP地址和目的IP地址 IP地址管理 网
  • django channels实战(websocket底层原理和案例)

    1 websocket相关 1 1 轮询 1 2 长轮询 1 3 websocket 1 3 1 websocket原理 1 3 2 django框架 asgi py在django项目同名app目录下 1 3 3 聊天室 django代码总
  • 法线向量扰动、副法线

    3D数学 学习笔记 9 凹凸映射 bump mapping 和切线空间 tangent space 凹凸映射和切线空间在图形学中也是用的较多的 下面给大家介绍下凹凸映射和切线空间 并和大家说下凹凸映射和切线空间的区别和优缺点 凹凸映射 bu
  • 深圳益百分稳健前行 在商业创新中寻找平衡点

    文 李永华 来源 螳螂财经 ID TanglangFin 遭遇舆论危机后 滴滴创始人之一柳青曾在微博上晒出程维的照片 并配文 一个在两周内瘦成一道闪电的男人 程维快速变瘦的背后是一个高速发展的巨头级企业面临巨大监管和舆论压力的写照 一边是庞
  • Entity Framework Core系列教程-4 DbContext

    Entity Framework Core DbContext DbContext类是Entity Framework Core的组成部分 DbContext实例代表与数据库的会话 可用于查询实体实例并将其保存到数据库 DbContext是
  • SQL注入代码实践(盲注-获取数据库名长度【数值型】)

    coding utf 8 Time 2022 4 4 16 19 Auth zhangxiang File GetLength Inject py IDE PyCharm Motto ABC Always Be Coding 获取数据库名长
  • STM32——USART串口

    文章目录 一 通信接口 二 串口通信 三 硬件电路 四 电平标准 五 串口参数及时序 六 STM32的USART外设简介 七 USART框图 八 USART基本结构 九 数据帧 十 起始位侦测和采样位置对齐 十一 数据采样 十二 波特率发生
  • 副高相当于副处吗_事业单位岗位工资副高职为何分为五六七级,调级时..._事业单位考试_帮考网...

    一般机关 事业单位工资制度和晋升等 各地都会按照国家人事部 财政部 国家计委 关于印发机关 事业单位工作人员正常晋升工资档次办法的通知 来制定当地的工作晋升等标准和规定 建议咨询当地的组织部门 1 五级职员 是指事业单位正处级别 根据试行办
  • PLY格式学习

    最近写论文为了使三维重建结果呈现的更加漂亮直观一些 尝试对三维空间数据进行表面重建 采用Poisson Reconstruction 点击打开链接 方法 该方法使用的数据格式为ply格式 Ply格式是Stanford Stanford Bu
  • 关于“Unable to establish loopback connection Connection timed out: connect”问题的解决方案参考

    前言 最近使用AS 3 0启动一个工程 在gradle同步的时候 出现了 Unable to establish loopback connection Connection timed out connect 的问题 在网上找了很久 主要
  • shell基础

    目录 shell脚本介绍 一 shell脚本是什么 二 为什么要学shell 而不是其他计算机语言 三 学习这门课程的优势 四 学了能干什么 五 学习什么内容 六 学习的技巧 七 成长路径 八 学习环境 编程语言与shell脚本 一 编程语
  • React 查找表格数据例子

    假设我们已经有了一个返回 JSON 的 API category Sporting Goods price 49 99 stocked true name Football category Sporting Goods price 9 9