“FieldValue.arrayUnion 不是函数”错误

问题描述 投票:0回答:1

我已经尝试通过多次更新我的 npm 版本来修复“FieldValue.arrayUnion 不是函数”错误,但它不起作用。我在 arrayUnion 行收到错误。请帮我解决这个问题。

代码:

try {
    const recipientDocRef = doc(db, 'usersNew', selectedFriend.username);

    await updateDoc(recipientDocRef, {
        friendRequests: FieldValue.arrayUnion(user.uid)
    });

    toast.success(`Friend request sent to ${selectedFriend.username}`);
} catch (error) {
    console.error('Error sending friend request:', error);

    // More specific error messages (if possible)
    if (error.code === 'firestore/permission-denied') {} else {
        toast.error('You do not have permission to send friend requests. Please check your Firestore rules.');
    }
    toast.error('Error sending friend request. Please try again.');
} finally {
    setIsLoadingRequest(false);
}

这就是我导入的方式

FieldValue
:

import { FieldValue } from 'firebase/firestore'; 

我多次尝试更新 npm 版本。 我尝试更改 Firestore 数据库中的字段。

javascript firebase google-cloud-firestore
1个回答
0
投票

您遇到的错误“FieldValue.arrayUnion 不是函数”表明

FieldValue
的导入或使用方式可能存在问题。
FieldValue
实际上是一个包含多个实用函数的命名空间,其中包括
arrayUnion
。在 Firebase 的最新版本(v9 及更高版本)中,Firestore 的导入方法已更改为支持模块化导入,这也会影响访问
arrayUnion
等实用函数的方式。

解决此问题的方法如下:

  1. 正确导入

    arrayUnion
    函数:由于您直接使用
    FieldValue
    ,因此确保从 Firestore 包正确导入
    arrayUnion
    非常重要。

  2. 使用导入的函数:正确导入后将

    FieldValue.arrayUnion
    替换为
    arrayUnion

让我们用正确的导入和用法重构您的代码:

import { doc, updateDoc, arrayUnion } from 'firebase/firestore';  // Import arrayUnion directly

try {
    const recipientDocRef = doc(db, 'usersNew', selectedFriend.username);

    await updateDoc(recipientDocRef, {
        friendRequests: arrayUnion(user.uid)  // Use arrayUnion directly
    });

    toast.success(`Friend request sent to ${selectedFriend.username}`);
} catch (error) {
    console.error('Error sending friend request:', error);

    if (error.code === 'firestore/permission-denied') {
        toast.error('You do not have permission to send friend requests. Please check your Firestore rules.');
    } else {
        toast.error('Error sending friend request. Please try again.');
    }
} finally {
    setIsLoadingRequest(false);
}

其他建议:

  • 检查 Firestore 规则:确保您的 Firestore 安全规则允许当前用户更新相关文档的
    friendRequests
    字段。
  • 验证 Firebase 版本:确保您使用的是兼容版本的 Firebase。如果您最近更新了 Firebase,请仔细检查所有导入和使用模式是否符合版本的要求。

如果您在进行这些更改后仍然遇到问题,检查您正在使用的 Firebase 的确切版本并查阅 Firestore 的 Firebase 文档的相应版本可能会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.