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

React中输入框清空时如何将搜索state重置回初始状态?

问题原因

当你把输入框内容清空时,onSearch 接收到的name参数是空字符串,现有逻辑会直接携带空参数发起搜索请求,多数情况下这类无效请求会返回报错,不会执行到setSearch(data)的逻辑,因此之前的搜索结果就一直保留了下来。

解决方案

修改onSearch函数,新增空输入判断逻辑,检测到输入为空时直接重置search状态即可,还可以同步添加错误处理逻辑,避免搜索不存在的内容时状态异常:

function App() {
  const [input, setInput] = useState("");
  const [countries, setCountries] = useState([]);
  const [search, setSearch] = useState([]); 

  function onSearch(name) {
    // 新增判断:输入为空时直接重置搜索状态,不发起无效请求
    if (!name.trim()) {
      setSearch([]);
      return;
    }
    fetch(`https://restcountries.eu/rest/v2/name/${name}`)
      .then((r) => r.json())
      .then((data) => {
        setSearch(data);
      })
      // 新增错误捕获:请求失败时也重置搜索状态
      .catch(() => {
        setSearch([]);
      })
  }
  // 其余逻辑保持不变
}

可选优化

如果不想每次输入字符都触发请求,可以添加防抖逻辑,降低请求频率:

// 全局定义防抖函数
function debounce(func, delay = 300) {
  let timer;
  return (...args) => {
    clearTimeout(timer);
    timer = setTimeout(() => func.apply(this, args), delay);
  }
}

// App组件内用防抖包装onSearch
const debouncedSearch = debounce(onSearch);

// Form组件触发时调用debouncedSearch即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:51:03