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

React条件渲染组件问题:加密货币币种切换显示异常求助

解决加密货币价格币种切换的问题

我帮你排查了代码里的问题,主要是两个核心点导致切换开关后报错,下面给你一步步修复方案:


1. 修复API请求的触发时机

你的useEffect依赖数组是空的,这意味着只有组件第一次挂载时才会调用API拿数据。当切换开关修改currency后,不会重新发起请求,导致后续渲染时拿不到对应币种的报价数据,自然会抛出错误。

把currency加入到useEffect的依赖数组中,这样每次currency变化时都会重新请求对应币种的数据:

useEffect(() => { 
  axios.get(`http://localhost:9000/api/${currency}`).then( 
    (response)=>{ 
      setCoins(response.data) // 无需先清空数组,直接赋值新数据即可
    }) 
}, [currency]) // 新增currency作为依赖项

2. 修正开关切换的状态判断逻辑

setSwitchState是异步操作,你在调用它之后立刻用switchState判断,拿到的还是旧的状态值,这会导致币种设置完全反了(比如开关切到INR时,代码还以为是USD)。

直接用开关返回的event值来设置currency就可以,不用依赖旧的状态:

<BootstrapSwitchButton 
  checked={switchState} 
  onlabel='USD' 
  offlabel='INR' 
  onChange={(event)=>{ 
    setSwitchState(event) 
    // 直接用当前开关的状态设置币种
    setCurrency(event ? "USD" : "INR") 
  }}
/>

3. 简化表格渲染逻辑

你现在根据switchState写了两遍几乎完全一样的map渲染逻辑,不仅冗余还容易出错。可以直接根据当前的currency来取对应报价,简化代码:

{filterCoins.map((coin)=>{ 
  // 根据当前币种获取对应的报价数据
  const currentQuote = coin.quote[currency];
  return(
    <Coin 
      key={coin.id} 
      name={coin.name} 
      symbol={coin.symbol} 
      price={currentQuote.price} 
      change24hr={currentQuote.percent_change_24h} 
      marketCap={currentQuote.market_cap} 
      vol24hr={currentQuote.volume_24h}
    /> 
  ) 
})}

做完这三处修改后,切换开关时会正确更新currency,触发API重新请求对应币种的数据,表格也会自动渲染最新的价格信息,就不会再出现报错了。

内容的提问来源于stack exchange,提问作者sudhanva shankara.m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:16:07