React写法——使用js高阶函数实现多条件搜索功能

简介: React写法——使用js高阶函数实现多条件搜索功能


🙂博主:小猫娃来啦

🙂本文核心:React写法——使用js高阶函数实现多条件搜索功能

目录

思考一下

前端搜索是很常见的功能,各种网页,后台管理系统都会频繁出现这一功能。能否有一种最为精妙的方式实现这一功能呢?

⭐首先我用了一下csdn官网的搜索这个搜索也是非常好用,是button按钮的形式来点击控制搜索。

但还有一种搜索是用input事件做的搜索,一边搜索一边显示数据,这种搜索个人感觉比较舒服一点。

但无论是哪种搜索,实现思路其实是一样的。

代码是什么?你如何看待编程语言?

⭐每个人都有不同的回答。为此我问卷了很多人,最终得到一个比较接近本源的回答。

这段回答是这样的:
人类有人类的语言,计算机有计算机的语言。计算机的语言从二进制开始,一直是以0和1的排列组合形成的语言,很难去描述一种东西,很难让人接受。故而有了编程语言,编程语言存在的意义就是为了让程序好描述,让人们好理解。同样一个功能,一百人写,可能有一百种写法。


所以今天我们用尽可能最简单的方式去实现前端搜索功能。

用react写法来实现,思路+步骤:

第一步:准备数据

首先,需要创建一段假数据,模拟后端接口返回的数据。

后端数据是这样的(以MySql数据库为例):

这是可视化的后端数据表,上面这个表的表头是字段,下面的数据是字段对应的值。

前端请求后端接口,返回的数据是这样的(一般是数组包对象的形式):所以我们设计的假数据,应当和接口请求的数据格式相同,也是数组包对象的形式。

所以最终我们设计的数据如下:

    const res = [
      { id: 1, name: '张温', age: '19', gender: '男' },
      { id: 2, name: '张三丰', age: '38', gender: '男' },
      { id: 3, name: '张无忌', age: '25', gender: '男' },
      { id: 4, name: '王无维', age: '25', gender: '男' },
      { id: 5, name: '马云禄', age: '17', gender: '女' },
      { id: 6, name: '黄月英', age: '17', gender: '女' },
    ]

第二步:根据数据结构渲染Dom

⭐这一步,我们要根据数据接口,看看要设计几个搜索框。

根据第一步我们设计的数据,我们需要设计三个搜索框。并引入表格组件将数据渲染到表格种。我们先声明三个变量:

data变量用来接收存放数据,list变量用来渲染数据,search变量用来数据搜索

  const [data, setData] = useState([])
  const [list, setList] = useState([])
  const [search, setSearch] = useState({
    name: ``,
    age: ``,
    gender: null,
  })

渲染数据,我们需要引入组件,最终做法如下

  return (
    <>
      <Alert message="用户管理" type="success" closable />
      <br />
      <Space wrap>
        <Space align="center">
          姓名:
          <Input
            value={search.name}
            onChange={(v) => setSearch({ ...search, name: v.target.value })}
            placeholder="请输入姓名"
          />
        </Space>
        <Space align="center">
          年龄:
          <Input
            value={search.age}
            onChange={(v) => setSearch({ ...search, age: v.target.value })}
            placeholder="请输入年龄"
          />
        </Space>
        <Space align="center">
          性别:
          <Select
            value={search.gender}
            onChange={(v) => setSearch({ ...search, gender: v })}
            placeholder="请输入性别"
            options={[
              {
                value: '男',
                label: '男',
              },
              {
                value: '女',
                label: '女',
              },
            ]}
            style={{
              width: 180,
            }}
          />
        </Space>
        <Space align="center">
          <Button type="primary" onClick={handleSearch}>
            搜索
          </Button>
          <Button
            onClick={() => {
              setList(data)
              setSearch({
                name: ``,
                age: ``,
                gender: null,
              })
            }}
          >
            重置
          </Button>
        </Space>
      </Space>
      <Table
        rowKey="id"
        columns={[
          {
            title: '姓名',
            dataIndex: 'name',
          },
          {
            title: '年龄',
            dataIndex: 'age',
          },
          {
            title: '性别',
            dataIndex: 'gender',
          },
        ]}
        dataSource={list}
      />
    </>
  )

⭐展示效果是这样:
第三步:处理筛选条件

因为我们的数据只有三个字段,即 姓名,年龄,性别。所以我们可以最大设置三个搜索框,也就是三个搜索条件。

如果我们的数据有n个字段,那么我们可以最大设置n个搜索框,也就是n个搜索条件。


这里需要注意,搜索姓名时,比如我们输入张三,那么应该得到和张三有关的所有数据。

如果在此基础上,我们输入18岁,则应以上面筛选的结果为基础,再筛选18岁。此时就是两个条件。

以此类推,可以由多个条件。


也就是说,这里最核心的是,一定是对原数据进行处理。


满足条件1 ===>得到结果1(深拷贝的数据源第一次筛选处理得到的结果1)

满足条件2 ===>得到结果2(以结果1为数据源再筛选条件2得到结果2)

。。。。。。


条件之间是交集关系


最终我们这样操作数据:

      data.filter((item) =>search.name ? item.name.includes(search.name) : true)
          .filter((item) =>search.age ? item.age.includes(search.age) : true)
          .filter((item) =>search.gender ? item.gender === search.gender : true)

那么事情到这就做完了,我们看一下效果:

react写法实现前端搜索功能(完整代码)

因为这里是react项目,所以我直接将本功能以及代码打包成了资源上传。

需要研究的可以等资源上传成功下载学习。说明一下:

下载后,需要终端执行命令:

npm install -g create-react-app,全局安装react脚手架工具

npm i,安装依赖

npm run dev运行项目


有不明白的,欢迎评论区留言讨论。如果本文解决了你的问题,对你有帮助,还望不吝三连🙂🙂🙂


相关文章
|
6月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
274 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
5月前
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
5月前
|
JavaScript
JS实现多条件搜索函数
JS封装的多条件搜索
|
6月前
|
前端开发 JavaScript
【Javascript系列】Terser除了压缩代码之外,还有优化代码的功能
Terser 是一款广泛应用于前端开发的 JavaScript 解析器和压缩工具,常被视为 Uglify-es 的替代品。它不仅能高效压缩代码体积,还能优化代码逻辑,提升可靠性。例如,在调试中发现,Terser 压缩后的代码对删除功能确认框逻辑进行了优化。常用参数包括 `compress`(启用压缩)、`mangle`(变量名混淆)和 `output`(输出配置)。更多高级用法可参考官方文档。
407 11
|
6月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
8月前
|
JavaScript 前端开发 安全
盘点原生JS中目前最没用的几个功能API
在JavaScript的发展历程中,许多功能与API曾风光无限,但随着技术进步和语言演化,部分功能逐渐被淘汰或被更高效的替代方案取代。例如,`with`语句使代码作用域复杂、可读性差;`void`操作符功能冗余且影响可读性;`eval`函数存在严重安全风险和性能问题;`unescape`和`escape`函数已被`decodeURIComponent`和`encodeURIComponent`取代;`arguments`对象则被ES6的剩余参数语法替代。这些变化体现了JavaScript不断优化的趋势,开发者应紧跟技术步伐,学习新技能,适应新技术环境。
111 10
|
8月前
|
JavaScript 前端开发
【Vue.js】监听器功能(EventListener)的实际应用【合集】
而此次问题的核心就在于,Vue实例化的时机过早,在其所依赖的DOM结构尚未完整构建完成时就已启动挂载流程,从而导致无法找到对应的DOM元素,最终致使计算器功能出现异常,输出框错误地显示“{{current}}”,并且按钮的交互功能也完全丧失响应。为了让代码结构更为清晰,便于后续的维护与管理工作,我打算把HTML文件中标签内的JavaScript代码迁移到外部的JS文件里,随后在HTML文件中对其进行引用。
123 8
|
9月前
|
JavaScript 容器
带方向感知功能的js图片遮罩层插件
带方向感知功能的js图片遮罩层插件
|
4月前
|
缓存 前端开发 数据安全/隐私保护
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
211 68
|
4月前
|
缓存 前端开发 Java
在 React 中,组合组件和高阶组件在性能方面有何区别?
在 React 中,组合组件和高阶组件在性能方面有何区别?
193 67