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

使用URLSearchParams提取Query Params时返回[object Object]报错求助

问题排查与修复方案

核心问题分析

返回[object Object]通常是因为你直接把一个错误对象当成字符串拼接了,大概率是接口请求参数异常、未处理错误,或者返回值格式处理不当导致的。下面是具体排查点和修复方案:


1. 补全useEffect依赖,确保参数就绪后再发起请求

你的useEffect依赖数组是空的,在Gatsby这类SSR框架中,客户端hydrate阶段才会拿到window对象获取参数,组件初始化时dt和ut可能还未赋值,导致请求时参数为undefined,触发接口错误。

修复:把dt和ut加入useEffect的依赖数组,并先做非空校验:

useEffect(() => {
  // 参数不存在时直接返回,避免无效请求
  if (!dt || !ut) return;
  
  const fetchData = async () => {
    // ...后续请求逻辑
  }
  fetchData()
}, [dt, ut]) // 加入依赖,确保参数更新后重新请求

2. 增加错误捕获,明确接口错误详情

当前代码未处理异步请求的错误,接口返回错误对象时,直接拼接就会变成[object Object]。需要用try/catch捕获错误,打印具体信息定位问题。

3. 处理URL参数为null的情况

URLSearchParams.get()找不到对应参数时会返回null,直接传给接口会导致请求参数异常,必须先做非空判断。

4. 确认getContract的返回值格式

如果getContract是用axios等库封装的,它可能返回包含data属性的响应对象,而非直接的文件路径字符串,需要取result.data而非result。


完整修复后的代码

import React, { ReactElement, useEffect, useState } from 'react'
import Viewer from './Viewer/Viewer'
import getContract from '../../services/getContract'

const ContractView = (): ReactElement => {
  const [contractFile, setContractFile] = useState<string>('')

  let dt: string | null = null
  let ut: string | null = null

  if (typeof window !== `undefined`) {
    const urlParams = new URLSearchParams(window.location.search)
    dt = urlParams.get('dt')
    ut = urlParams.get('ut')
  }

  useEffect(() => {
    if (!dt || !ut) return;

    const fetchData = async () => {
      try {
        const result = await getContract({
          document: dt,
          usage: ut,
        })
        // 根据getContract的实际返回格式调整,比如axios响应取result.data
        const filePath = typeof result === 'object' ? result.data : result;
        if (filePath) {
          setContractFile(`${process.env.GATSBY_API_URL}/${filePath}`)
        }
      } catch (error) {
        console.error('获取合同文件失败:', error) // 打印错误详情
      }
    }
    fetchData()
  }, [dt, ut])

  return <Viewer pdfFile={contractFile} />
}

export default ContractView

额外排查建议

  • 打开浏览器控制台Network面板,查看getContract请求的参数是否正确传递
  • 检查接口返回的具体内容,确认是错误信息还是格式不符合预期
  • 查看getContract的封装代码,确认它的返回值是直接的文件路径,还是需要解析的响应对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:15:08