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

React上传Firebase Storage报错:Cannot read properties of undefined (reading 'ref')

错误原因

  • 导入路径不匹配:你使用了firebase/compat/app兼容版本的核心API,但Storage模块导入的是非兼容版本路径,导致storage方法没有挂载到全局firebase实例上
  • 调用语法错误:firebase.storage是初始化方法,需要添加括号执行后才能拿到Storage实例,实例才具备ref方法,你直接访问firebase.storage.ref相当于从方法对象上读取不存在的ref属性,自然抛出undefined错误
  • 回调逻辑错误:on("state_changed")的第二个参数要求传入回调函数,你直接写alert("success")会在代码执行时立即触发弹窗,而非上传成功后执行

修复代码

import React from 'react';
import firebase from 'firebase/compat/app';
// 修正为compat版本的Storage导入
import "firebase/compat/storage";

function ProfilePic() {
    // 初始值改为null,和后续判空逻辑匹配
    const [image, setImage] = React.useState(null);

    const upload = () => {
        if (image == null) return;
        console.log(image);
        // 调用firebase.storage()获取实例后再取ref
        const ref = firebase.storage().ref(`images/${image.name}`);
        ref.put(image).on(
            "state_changed",
            // 上传成功后才执行alert
            () => alert("success"),
            // 错误回调传入错误信息
            (err) => alert(err.message)
        );
    }
  
  return (
    <div className="App">
      <center>
      <input type="file" onChange={(e) => setImage(e.target.files[0])}/>
      <button onClick={upload}>Upload</button>
      </center>
    </div>
  );
}

export default ProfilePic;

额外注意

请确保你已经在项目入口文件中完成了firebase app的初始化配置,未正确初始化也会导致相关API读取异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:06:03