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

React项目Chrome浏览器编译失败,提示collection、unSub未定义该如何解决?

报错原因及修复方案

collection未定义报错(对应Line10、Line22)

你的自定义Hook未声明collection作为入参,函数内部和useEffect依赖数组中直接调用该变量时,没有对应的变量声明,因此触发未定义报错。需要在Hook定义处补充collection入参。

unSub未定义报错(对应Line20)

JavaScript变量名大小写敏感,你在useEffect内定义的监听取消变量名为unsub(小写开头),清理函数中调用的是unSub(大写S开头),二者为不同变量,因此触发未定义报错,需要统一变量名。

额外运行时错误修复

你使用的Firestore快照监听方法名拼写错误,正确为驼峰格式onSnapshot,全小写的onsnapshot会在后续运行时触发方法不存在的报错,需同步修正。

修正后完整代码

import { useState, useEffect } from "react";
import { projectFirestore } from '../firebase/Config';

// 补充collection作为入参
const useFirestore = (collection) => {
    const [docs, setDocs] = useState([]);

    useEffect(() => {
       const unsub = projectFirestore.collection(collection)
        .orderBy('createdAt', 'desc')
        // 修正方法名为驼峰格式
        .onSnapshot((snap) => {
            let documents = [];
            snap.forEach(doc => {
                documents.push({ ...doc.data(), id: doc.id});
            });
            setDocs(documents);
        });

        // 统一变量名为小写unsub
        return () => unsub();

    }, [collection])

    return { docs };
}

export default useFirestore;

调用说明

使用该Hook时传入你要监听的Firebase集合名称即可,示例:
const { docs } = useFirestore('images')
将images替换为你的实际集合名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:36:03