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

为什么React搜索国家输入无匹配值时会报countries.map is not a function错误

错误根因

你调用的国家查询接口在搜索无匹配结果时,不会返回空数组,而是返回状态码404的错误响应体,格式为普通对象而非数组。你直接将这个返回的对象赋值给了原本是数组类型的countries状态,后续执行countries.map时,对象不存在map方法,就抛出了对应错误。

修复方案

你需要对接口返回结果做类型校验,确保赋值给countries的始终是数组类型,修改后的fetchCountries方法参考如下:

  • 先判断接口响应是否成功,状态码非2xx的情况直接设置空数组
  • 再校验返回数据是否为数组类型,不符合就兜底为空数组
const fetchCountries = async () => {
  let url
  if (query) {
    url = `${mainUrl}${serachUrl}${query}`
  } else {
    url = `${mainUrl}${all}`
  }
  try {
    const response = await fetch(url)
    // 先判断响应是否正常
    if (!response.ok) {
      setCountries([])
      return
    }
    const data = await response.json()
    // 二次校验返回内容是否为数组,兜底处理
    setCountries(Array.isArray(data) ? data : [])
  } catch (error) {
    // 网络异常等情况也设置为空数组,避免报错
    setCountries([])
    console.log(error)
  }
}

可选优化

如果需要给用户展示无搜索结果的提示,可以额外加一个状态字段记录无结果的状态,在判断返回为空数组时更新状态,渲染对应的提示文案即可。

内容的提问来源于stack exchange,提问作者Ricardo de Paula

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:54:04