You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React.js搜索栏填充内容后隐藏建议项span的问题求解

问题根因
  • 选中建议项时仅更新了query为选中的城市名,未清空存储建议列表的data数组,且此时query不为空,会触发后续的建议接口请求返回新的匹配结果,导致建议列表持续展示
  • 点击搜索按钮触发的search方法中没有清空query和data的逻辑,仅回车搜索时做了清空query的处理,因此点击搜索后建议列表不会消失
  • 额外可优化点:当前的fetch请求未正确捕获异常,外层的try/catch无法捕获Promise链内抛出的错误
修复方案

1. 修改建议项点击逻辑

选中建议后直接清空建议列表,避免选中后列表残留:

<div key={key} onClick={() => { 
  setQuery(suggestion.ascii);
  setData([]); // 新增:选中后清空建议列表
}}>
  <span>{suggestion.ascii}</span>
</div>

2. 补充搜索提交的清空逻辑

在点击搜索触发的search方法中新增输入框和建议列表的清空逻辑,和回车提交行为对齐:

const search = async () => {
  setIsLoading(true);
  await props.onCitySearch(data)
  setIsLoading(false);
  setQuery(''); // 新增:提交后清空输入框
  setData([]); // 新增:提交后清空建议列表
}

3. 修复异常捕获逻辑(可选优化)

将fetch的异常捕获移到Promise链的catch中,确保接口异常能被正确捕获:

useEffect(() => {
  if (query === "") {
    setData([]);
    return;
  }

  const path = position === null
    ? `http://localhost:8080/suggestions?q=${query}&page=0`
    : `http://localhost:8080/suggestions?q=${query}&latitude=${position.latitude}&longitude=${position.longitude}&page=0`

  fetch(path)
    .then(response => response.json())
    .then(({ cities }) => setData(cities))
    .catch(e => console.error(e)); // 替换原外层try/catch,用catch捕获异步异常

}, [query, position])

内容的提问来源于stack exchange,提问作者Alain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:24:03