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

API调用中URL显示[object%20Object]?请帮忙排查Settings组件问题

为什么我的API调用中URL显示[object%20Object]?

咱们先拆解下这个问题:当你把一个JS对象直接转成字符串时,默认会得到[object Object],URL编码后空格就变成了%20,所以就出现了你看到的[object%20Object]。这说明你在API URL里不小心拼接了一个对象,而不是预期的字符串/数值。

看你贴的代码,问题主要出在这几个地方:

1. onChange回调的参数完全错了

React里<select>的onChange事件回调,第一个参数是事件对象(event),不是你写的prop和attr。你需要通过event.target来获取选中的选项值,比如event.target.value。

2. 用了未定义的变量id和value

你的代码里直接调用this.props.fetchData(id,value),但id和value在当前的render作用域里根本没定义啊!这两个变量要么是undefined,要么如果你误把事件对象当成了某个参数传递进去,那fetchData拿到的就是个对象,拼URL的时候自然就变成[object%20Object]了。

修正后的代码示例

假设你需要传递的id来自组件的props(比如this.props.id),选中的是货币值,那代码应该改成这样:

class Settings extends Component {
  render(){
    return(
      <div className='App container'>
        <h3>Select Currency</h3>
        <select 
          className="custom-select" 
          onChange={(event) => {
            const selectedCurrency = event.target.value;
            // 确保id是你需要的正确值,比如从props获取
            this.props.fetchData(this.props.id, selectedCurrency);
          }}
        >
          <option value="">请选择货币</option>
          <option value='EUR'>EUR</option>
          {/* 可以再加其他货币选项 */}
        </select>
        <Link to='/' className="btn" type="submit">Submit</Link>
      </div>
    )
  }
}

额外要检查的点

最后别忘了去看你的fetchData函数是怎么处理参数的,确保它没有把对象直接拼到URL里。比如如果fetchData里是这样写的:

fetch(`/api/your-endpoint/${id}/${value}`)

那一定要保证id和value都是字符串或数值类型,不能是对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:28:18