我已经尝试通过多次更新我的 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 数据库中的字段。
您遇到的错误“FieldValue.arrayUnion 不是函数”表明
FieldValue
的导入或使用方式可能存在问题。 FieldValue
实际上是一个包含多个实用函数的命名空间,其中包括arrayUnion
。在 Firebase 的最新版本(v9 及更高版本)中,Firestore 的导入方法已更改为支持模块化导入,这也会影响访问 arrayUnion
等实用函数的方式。
解决此问题的方法如下:
正确导入
arrayUnion
函数:由于您直接使用 FieldValue
,因此确保从 Firestore 包正确导入 arrayUnion
非常重要。
使用导入的函数:正确导入后将
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);
}
friendRequests
字段。如果您在进行这些更改后仍然遇到问题,检查您正在使用的 Firebase 的确切版本并查阅 Firestore 的 Firebase 文档的相应版本可能会有所帮助。