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

React调用Google Custom Search API部分数据undefined问题解决

解决Google Custom Search API返回字段undefined的问题

问题原因

初始状态下resultData是空对象,未执行搜索时searchInformation属性不存在;即使搜索完成,若API返回异常,该属性也可能缺失。直接访问resultData.searchInformation.formattedTotalResults会因为上层属性不存在导致undefined,甚至引发渲染错误。

解决方案

1. 用可选链+空值合并运算符安全访问

和你处理items的逻辑一致,通过?.逐层安全访问嵌套属性,再用??设置默认显示内容,避免undefined直接展示:

<p>{resultData.searchInformation?.formattedTotalResults ?? '请输入关键词进行搜索'}</p>
  • ?.:如果searchInformation不存在,直接返回undefined,不会继续访问formattedTotalResults
  • ??:当左侧值为undefined或null时,显示右侧的默认文本

2. 优化结果列表的判断逻辑

你当前判断items的代码存在逻辑错误:Object.keys(resultData.items)返回数组,和0比较永远为true(数组和数字类型不匹配)。应该改用length判断:

{resultData.items?.length > 0 ? (
  <>
    {items}
  </>
) : (
  <>
    <p>No results</p>
  </>
)}

这里同样用?.确保items不存在时不会报错。

3. 结合loading状态优化用户体验

可以在loading状态下隐藏结果统计和列表,显示加载提示:

<div>
  {loading ? (
    <p>加载中...</p>
  ) : (
    <>
      <p>{resultData.searchInformation?.formattedTotalResults ?? '请输入关键词进行搜索'}</p>
      {resultData.items?.length > 0 ? (
        <>
          {items}
        </>
      ) : (
        <>
          <p>No results</p>
        </>
      )}
    </>
  )}
</div>

修改后的完整return示例

return (
  <div>
    <input className='searchInput' onChange={handleInputChange}></input>
    <button className='btn' onClick={searchInGoogle}>Submit</button>
    {/* <Searchbar /> */}
    <div>
      {loading ? (
        <p>加载中...</p>
      ) : (
        <>
          <p>{resultData.searchInformation?.formattedTotalResults ?? '请输入关键词进行搜索'}</p>
          {resultData.items?.length > 0 ? (
            <>
              {items}
            </>
          ) : (
            <>
              <p>No results</p>
            </>
          )}
        </>
      )}
    </div>
  </div>
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:24:31