Javascript firebase.firestore().collection()。其中(,,*)应为“value”参数
我一直在做React Native和Firebase项目。所有身份验证和数据库都使用Firebase服务。出于某种原因,在实现加载状态后,我开始从控制台接收此错误消息 这是本机错误 这是我实际的聊天组件。 如果我只提交useEffects部分,项目将恢复工作Javascript firebase.firestore().collection()。其中(,,*)应为“value”参数,javascript,firebase,react-native,google-cloud-firestore,react-redux,Javascript,Firebase,React Native,Google Cloud Firestore,React Redux,我一直在做React Native和Firebase项目。所有身份验证和数据库都使用Firebase服务。出于某种原因,在实现加载状态后,我开始从控制台接收此错误消息 这是本机错误 这是我实际的聊天组件。 如果我只提交useEffects部分,项目将恢复工作 const Chat = () => { const navigation = useNavigation(); const user = useSelector(({ auth }) => auth.user);
const Chat = () => {
const navigation = useNavigation();
const user = useSelector(({ auth }) => auth.user);
const [unreads, setUnreads] = useState(0);
useEffect(() => {
firestore()
.collection('threads')
.where('users', 'array-contains', user?.uid)
.orderBy('latestMessage.createdAt', 'desc')
.onSnapshot(threadsSnapshot => {
let count = 0;
setUnreads(0);
threadsSnapshot?.docs?.map(threadSnapshot => {
firestore()
.collection('threads')
.doc(threadSnapshot.id)
.collection('messages')
.where('read', '==', false)
.onSnapshot(messages => {
messages.docs.map(message => {
if (message.data().user._id !== user?.uid) {
count++;
}
});
setUnreads(count);
});
});
});
}, [user]);
return (
<TouchableOpacity onPress={() => navigation.navigate('Messenger')}>
<FontAwesomeIcon
style={style.menuContainerIcon}
icon={faInbox}
size={25}
color="#14121E"
/>
{unreads > 0 && (
<Badge
value={unreads > 99 ? '99+' : unreads}
status="success"
containerStyle={style.badgeMessages}
/>
)}
</TouchableOpacity>
);
};
const Header = ({
setModalVisible,
hideOptions,
title,
hideChat,
hideFinder,
hideBack,
}) => {
const navigation = useNavigation();
return (
<View style={style.container}>
{!hideBack && (
<IconButton icon="arrow-left" onPress={() => navigation.goBack()} />
)}
<TouchableOpacity onPress={() => navigation.navigate('Home')}>
<Text style={style.text}>{title}</Text>
</TouchableOpacity>
<View style={style.menuContainer}>
{!hideFinder && (
<TouchableOpacity onPress={() => navigation.navigate('Messenger')}>
<FontAwesomeIcon
style={style.menuContainerIcon}
icon={faSearch}
size={20}
color="#14121E"
/>
</TouchableOpacity>
)}
{!hideOptions && (
<TouchableOpacity onPress={() => setModalVisible(true)}>
<FontAwesomeIcon
style={style.menuContainerIcon}
icon={faEllipsisH}
size={20}
color="#14121E"
/>
</TouchableOpacity>
)}
{!hideChat && <Chat />}
</View>
</View>
);
};
有人知道firebase函数需要哪些参数吗?您有两次调用此处的where,但没有说明错误所指的是哪一个。我猜这是第一个:
.where('users', 'array-contains', user?.uid)
第三个参数是它所引用的值。我敢打赌,您在这里传递的是未定义的,而该用户是未定义的,这意味着user?.uid也是未定义的,这不是传递给Firestore查询的有效值。您必须调试为什么该值不是您期望的值。可能在执行此查询时没有用户登录。您有两个到此处where的调用,但您没有说明错误所指的是哪一个。我猜这是第一个:
.where('users', 'array-contains', user?.uid)
第三个参数是它所引用的值。我敢打赌,您在这里传递的是未定义的,而该用户是未定义的,这意味着user?.uid也是未定义的,这不是传递给Firestore查询的有效值。您必须调试为什么该值不是您期望的值。可能在执行此查询时没有用户登录。我在我的场景中遇到了相同的错误,通过简单地包含第三个参数解决了模板字符串的问题,我不确定为什么,但它可以工作。请确保用户未定义,并尝试以下操作:
.where'users'、'array contains'、`${user.uid}`我在我的场景中遇到了相同的错误,通过简单地包含第三个参数解决了模板字符串的问题,我不知道为什么,但它可以工作。请确保用户未定义,并尝试以下操作: .where'users','array contains',`${user.uid}`