Javascript firebase.firestore().collection()。其中(,,*)应为“value”参数

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);

我一直在做React Native和Firebase项目。所有身份验证和数据库都使用Firebase服务。出于某种原因,在实现加载状态后,我开始从控制台接收此错误消息

这是本机错误 这是我实际的聊天组件。 如果我只提交useEffects部分,项目将恢复工作

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}`