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

求助解决Firebase报错:Uncaught FirebaseError: Expected type 'Ea'类型不匹配

解决Firebase错误:Uncaught FirebaseError: Expected type 'Ea', but it was: a custom mn object

错误原因

你这个错误是因为同时混用了Firebase Firestore的精简版(lite)和完整版SDK,导致API对象类型不兼容。代码里collection、orderBy从firebase/firestore/lite导入,而query、onSnapshot从firebase/firestore导入,两个版本的模块无法交叉使用。

解决方案

统一Firestore API的导入来源,二选一即可:

方案1:全用Firestore精简版(适合前端轻量场景)

将所有Firestore相关API都从精简版导入:

import React, { useEffect, useState } from "react";
// 统一从lite导入所有Firestore API
import { collection, orderBy, query, onSnapshot } from "firebase/firestore/lite";
import { db } from "../firebase";

const ImageGrid = () => {
  const [docs, setDocs] = useState([]);
  const colRef = collection(db, 'gallery');

  const dateQuery = query(colRef, orderBy("createdAt", "desc"));

  const getData = () => {
    onSnapshot(dateQuery, (snap) => {
      let documents = [];
      snap.docs.forEach((doc) => {
        documents.push({ ...doc.data(), id: doc.id });
      });
      console.log(documents);
      setDocs(documents);
    });
  };
  
  // useEffect(() => {
  //   getData();
  // }, []);
  return (
    <div className='img-grid'>
      <button onClick={getData}>Get Images</button>
      images
    </div>
  )
}

export default ImageGrid

方案2:全用Firestore完整版(需要高级功能时选择)

将所有Firestore相关API都从完整版导入:

import React, { useEffect, useState } from "react";
// 统一从完整版导入所有Firestore API
import { collection, orderBy, query, onSnapshot } from "firebase/firestore";
import { db } from "../firebase";

const ImageGrid = () => {
  const [docs, setDocs] = useState([]);
  const colRef = collection(db, 'gallery');

  const dateQuery = query(colRef, orderBy("createdAt", "desc"));

  const getData = () => {
    onSnapshot(dateQuery, (snap) => {
      let documents = [];
      snap.docs.forEach((doc) => {
        documents.push({ ...doc.data(), id: doc.id });
      });
      console.log(documents);
      setDocs(documents);
    });
  };
  
  // useEffect(() => {
  //   getData();
  // }, []);
  return (
    <div className='img-grid'>
      <button onClick={getData}>Get Images</button>
      images
    </div>
  )
}

export default ImageGrid

额外注意

如果后续用useEffect调用getData,记得添加监听清理逻辑避免内存泄漏:

useEffect(() => {
  const unsubscribe = onSnapshot(dateQuery, (snap) => {
    let documents = [];
    snap.docs.forEach((doc) => {
      documents.push({ ...doc.data(), id: doc.id });
    });
    setDocs(documents);
  });
  return unsubscribe; // 组件卸载时取消快照监听
}, []);

内容的提问来源于stack exchange,提问作者Oluwagbemiga Sunday Stephen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:01:18