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

React开发图库应用调用Firebase图片URL时img标签报错如何解决

问题1:img空元素报错解决

原因:你使用了React Bootstrap的Card.Img组件,该组件本身已经封装了原生<img>标签,你在其内部嵌套原生<img>相当于给<img>元素传入了子元素,而<img>属于HTML空元素(void element),不允许有子内容,因此触发报错。
解决方法二选一:

  • 方案1:直接使用Card.Img组件传参,删除内部原生<img>
<Card.Img 
  src={res.ImageUrl} 
  style={{width: "400px", height: "150px"}} 
/>
  • 方案2:删除外层Card.Img标签,直接使用原生<img>
<img src={res.ImageUrl} width = "400px" height="150px" />

额外注意:直接调用this.state.data.reverse()会修改原state数组,不符合React不可变数据原则,建议修改为[...this.state.data].reverse().map(),避免意外的状态异常。

问题2:已卸载组件更新state警告解决

原因:你在componentDidMount中发起了异步请求,若请求返回前组件已经被卸载,then/catch中的setState依然会执行,就会触发内存泄漏警告。
解决方法:添加组件挂载状态标记,或者取消未完成的异步请求,示例如下:

componentDidMount(){
    // 新增挂载标记
    this._isMounted = true;

    axios.get('/Data.json')
    .then(response => {
       const fetchedData = [];
       for(let key in response.data){
               fetchedData.push({
               ...response.data[key],
               id: key
           });
       }
       // 仅组件挂载时更新state
       if(this._isMounted) {
         this.setState({loading: false, data: fetchedData});
       }
    })
    .catch(error => {
        console.error(error)
        // 仅组件挂载时更新state
        if(this._isMounted) {
          this.setState({loading:false});
        }
    });
}

componentWillUnmount() {
  // 组件卸载时修改标记
  this._isMounted = false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:15:02