解决组件不能远程搜索的问题

问题描述

有一个组件a-select用于在下拉框中选中某个人物,在表单中提交。它的运作方式是其下拉框最初没有数据,需要用户搜索人名,后段会返回模糊搜索的系列数据。例如,前段搜索张建国,后段会返回"张建国"、"张坚果"等;搜索zjg同理;搜索"ll",返回"bill"、"killra"等。

但问题在于,前段此下拉框没有同步显示后段返回的所有数据,而是会严格显示与用户输入字段完全匹配的人名,例如搜索张建国,只显示张建国;搜索zjg则显示不出任何数据。

但此时,如果点击空白处再点击搜索框,又可以顺利显示上一次后段返回的所有数据。

已知选项没有经过特殊处理,是直接v-for循环显示后段返回的数据,搜索方式也被替换成了自定义的函数handleSearch,用于调用接口

解决方案

经过检查,该组件库该组件a-select会立即尝试在 当前已有的选项列表中查找包含"zjg"的条目。因为此时从服务器返回的数据还没到,列表是空的,所以它什么也找不到,就显示"无数据"。

与此同时,handleSearch 函数向服务器发送了请求。服务器成功返回了"张建国"、"张坚果"等数据,代码也更新了选项列表。但是,因为组件的内部状态已经被第一次的"本地筛选"设置为"无匹配结果",所以即便是选项列表更新了,它也不会重新显示下拉框内容。只有当再次交互(例如点击空白处再点击输入框)时,组件才会重新渲染,这时才能看到正确的数据。

那么解决方案就很简单了,在组件库中找到一个属性用于禁用组件自带的前端筛选功能,我这边是:filter-option="false"。解决成功。

额外解释一下,为什么搜索绝对匹配(或部分匹配)的字段可以显示,而只有名字首字母被限制:

当输入 "ll" :

  1. 向后端发请求,后端返回了包含 "bill" 的数据列表。
  2. 组件的选项数据更新了,包含了 "bill" 这个选项。
  3. 与此同时, 组件自带的前端筛选逻辑也在运行。它会用输入的 "ll" 去检查 options 列表里的每一项。
  4. 它发现 "bill" 这个名字里确实包含了 "ll",认为这是一个有效的匹配,于是就把它显示了出来。

当您输入 "zjg" :

  1. 向后端发请求,后端识别出这是拼音缩写,成功返回了 "张建国" 和 "张坚果" 的数据列表。
  2. 组件的 options 数据被正确更新了。
  3. 但问题来了 :组件自带的前端筛选逻辑非常"单纯",它并不知道 "zjg" 和 "张建国" 之间有什么关系。
  4. 它用 "zjg" 这个字符串去检查 "张建国" 和 "张坚果" 这两个选项的文字,发现完全不匹配。
  5. 因此, 前端筛选逻辑认为后端返回的这些数据都是无效的 ,做出了"没有匹配项"的判断,所以就看到了一个空的选项列表。
相关推荐
打呵欠的猫2 小时前
一个 Hook 让 AI 每次写文件前自动检查编码规范,违规代码再也提交不进来
前端·ai编程·代码规范
恋猫de小郭3 小时前
Android 17 + OkHttp 5.5.0 ,全新 ECH 下你的 HTTPS 域名可以请求时被安全隐藏
android·前端·flutter
后除3 小时前
从零到一: 创建一个 TypeScript 7 项目
前端·webpack·typescript
lerhxx3 小时前
我用 R3F 手搓了一个能走进去的 3D 迷宫简历(上):从选型架构到迷宫生成算法
前端·javascript·three.js
还有多久拿退休金3 小时前
不调多模态,纯文本大模型如何给系统操作配上截图
前端·llm·aigc
hunterandroid4 小时前
HarmonyOS WebSocket 实战:断线重连、心跳保活与连接状态机设计
前端
hunterandroid4 小时前
StateFlow 与 SharedFlow 的边界:状态与事件的正确建模
android·前端
心念科技4 小时前
1、搜索表单 xnSearch(基于:心念后台,后端 Java 21 + Spring Boot 4 + Spring Cloud,前端提供 ReactVue3+TS、Vue3+JS、Vue2+JS
前端
计算机魔术师5 小时前
Dwarkesh Patel 对 OpenAI/Hugging Face 事件的爆款解读被指危险误导
前端
自进化Agent智能体6 小时前
Hermes GitHub PR 审查 —— 自动化代码评审
前端