当前位置: 首页 > ai >正文

UniApp 实现搜索页逻辑详解

        在小程序中,搜索功能是非常常见的需求。今天分享一个搜索页的实现逻辑,包含 搜索输入、历史记录、热门搜索、分页加载、无数据处理 等核心功能


一、页面结构设计

        页面主要分为以下几个部分:

                1.搜索框:输入关键字,支持回车触发搜索、清除、取消。

                2.历史搜索:存储用户输入过的搜索关键字。

                3.热门搜索:给用户推荐一些固定的搜索词。

                4.搜索结果列表:展示接口返回的数据。

                5.无数据提示:当搜索不到结果时展示空状态。

二、核心逻辑拆解

        1.搜索输入框

                当用户输入关键字并点击回车(confirm 事件)时,需要触发搜索逻辑。

                关键点

                1.先 trim 输入内容,避免全是空格。

                2.如果关键字为空,直接 return,不做请求。

               3. 把关键字加入 历史搜索数组,并保存到 localStorage

                4.重置参数对象 queryParams,重新发起请求。

const onSearch = () => {uni.showLoading()queryParams.value.keyword = queryParams.value.keyword.trim()if (!queryParams.value.keyword) {uni.hideLoading()return}// 去重 + 限制长度historySearch.value = [...new Set([...historySearch.value, queryParams.value.keyword])].slice(0,10)uni.setStorageSync("historySearch", historySearch.value)initParams(queryParams.value.keyword) // 重置参数searchData() // 发请求
}

        2.点击标签搜索

                无论是历史搜索还是热门搜索,点击后逻辑一样:

                把 tab 的值赋给 keyword

                触发搜索函数

const clickTab = (value) => {initParams(value)onSearch()
}

     3.请求数据

                发起请求时,把结果追加到 classList,并做以下判断:

        如果 res.data.length < pageSize,说明没有更多数据了,设置 noData = true

        如果返回数据为空并且当前列表也为空,说明完全没有结果,设置 noSearch = true

const searchData = async () => {try {let res = await apiSearchData(queryParams.value)classList.value = [...classList.value, ...res.data]uni.setStorageSync("storgClassList", classList.value)if (res.data.length < queryParams.value.pageSize) {noData.value = true}if (res.data.length === 0 && classList.value.length === 0) {noSearch.value = true}} finally {uni.hideLoading()}
}

    4.下拉触底加载更多

                小程序中可以用 onReachBottom 监听触底事件,实现分页加载:

onReachBottom(() => {if(noData.value) returnqueryParams.value.pageNum++searchData()
})

     5.初始化参数

        每次新搜索时,需要清空旧数据、重置状态:

const initParams = (value = "") => {classList.value = []noData.value = falsenoSearch.value = falsequeryParams.value = {pageNum: 1,pageSize: 12,keyword: value || "",}
}

三、无数据处理

        搜索结果可能有三种情况:

                1.正常有数据 → 渲染列表

                2.没有更多数据 → 底部显示 uni-load-more

                3.完全没有搜索结果 → 显示空状态图

<view class="noSearch" v-if="noSearch"><uv-empty mode="search" icon="http://cdn.uviewui.com/uview/empty/search.png"></uv-empty>
</view>

四、效果总结

        搜索逻辑清晰:输入 / 点击标签 → 重置参数 → 发请求

        用户体验优化:历史搜索、本地存储、热门搜索

        异常处理:无结果、没有更多

        这样一套逻辑,可以完整覆盖大多数搜索需求。

效果图展示。

        

http://www.xdnf.cn/news/19573.html

相关文章:

  • 基本IP保护 Swagger UI 的中间件
  • 解决Elasticsearch高亮显示被横线截断的问题
  • 【音视频】WebRTC-NACK
  • sql执行过程
  • WordPress.com 和 WordPress.org 之间的区别说明
  • 大批量文件管理操作的linux与windows系统命令行终端命令
  • SpringMVC —— Spring集成web环境和SpringMVC快速入门
  • 腾讯混元翻译模型Hunyuan-MT-7B开源:小参数量大能量,获得30项国际冠军
  • Windows---DWORD与IPVOID
  • Sentinel vs Resilience4j vs Bucket4j:分布式限流方案对比与实战
  • 【音视频】VP8 与 VP9 技术详解及与 H.264 H.265 的对比
  • 扩散模型驱动的智能设计与制造:下一场工业革命?
  • idea创建类时自动添加文档注释
  • 【技术教程】如何将文档编辑器集成至基于Node.js的网页应用程序中
  • ESLint 相关
  • 单北斗GNSS位移监测技术解析
  • 网络通信IP细节
  • 企业级架构师综合能力项目案例二(项目性能优化方案JVM+数据库+缓存+代码JUC+消息中间件架构+服务熔断降级)
  • 想找Gamma的平替?这几款AI PPT工具值得试试
  • 设计模式:命令模式(Command Pattern)
  • 从 “容器保姆” 到 “云原生王者”:K8s 全方位指南
  • 并发编程——13 线程池ThreadPoolExecutor实战及其原理分析
  • 顶级科学家的AI使用指南:从工具到合作伙伴
  • 华清远见25072班I/O学习day3
  • Redis分层缓存
  • DELPHI 利用OpenSSL实现加解密,证书(X.509)等功能
  • 犀牛派A1上使用Faster Whisper完成音频转文字
  • 哈尔滨云前沿服务器托管与租用服务
  • 科普:为什么在开发板上运行 Qt 程序时需要在命令后加 -platform linuxfb
  • Linux文本处理工具完全指南:cut、sort、uniq、tr、sed与awk详解