【问题标题】:Firebase error Function CollectionReference.doc()Firebase 错误函数 CollectionReference.doc()
【发布时间】:2020-12-06 14:33:37
【问题描述】:

以下与 firebase 进行反应连接的项目具有以下问题代码。单击输入按钮提交消息后,它会从数据库中返回错误。(下图)。我创建了集合“房间”,并尝试使用 db.collection("rooms").doc(channelId).collection({ }) 第 17 行进行访问,这会从 firebase 中恢复错误.

这个错误信息是什么意思? FirebaseError:函数 CollectionReference.doc() 要求其第一个参数为非空字符串类型,但它是:true

我删除了 firebase.ps1 文件并重新登录。 创建了一个新的 db.collection 还是一样的。

import React, { useState } from "react";
import "./ChatInput.css";
import db from "./firebase";
import { useStateValue } from "./StateProvider";
import firebase from "firebase";
import { Button } from "@material-ui/core";

function ChatInput({ channelName, channelId }) {

    const [input, setInput] = useState("");
    const [{ user }] = useStateValue();


    const sendMessage = (e) => {
        e.preventDefault();

        if (channelId) {
              db.collection("rooms").doc(channelId).collection({
                message: input,
                timestamp: firebase.firestore.FieldValue.serverTimestamp,
                user: user.displayName,
                userImage: user.photoURL,
             });
         }

         setInput("");

    };


    return (
        <div className="chatInput">

            <form>
                
                <input
                value={input}
                onChange={(e) => setInput(e.target.value)}
                placeholder={`Message #${channelName?.toLowerCase()}`} />

                    <Button type="submit" onClick={sendMessage}>
                        SEND</Button>

            </form>

        </div>
    );
}

export default ChatInput;

**还添加了以下代码,但仍然遇到同样的问题 Changes madechanges made 2

function collectionreference-error firebase error

【问题讨论】:

    标签: javascript reactjs firebase google-cloud-firestore


    【解决方案1】:
    import React, { useState } from "react";
    import "./ChatMsg.css";
    import db from "./firebase";
    import firebase from "firebase";
    import { useStateValue } from "./stateProvider";
    
    function ChatMsg({ channelName, channelId }) {
      const [input, setInput] = useState("");
      const [{ user }] = useStateValue();
      const sendMessage = (e) => {
        
        e.preventDefault();
        if (channelId) {
          db.collection("rooms").doc(channelId).collection('messages').add({
            message: input,
            user: user.displayName,
            timestamp: firebase.firestore.FieldValue.serverTimestamp(),
            userimage:user.photoURL
            
           
          });
                
        }
      };
    
      return (
        <div className="chatInput">
          <form>
            <input
              value={input}
              onChange={(e) => setInput(e.target.value)}
              placeholder={`Message # ${channelName}`}
            />
            <button type="submit" onClick={sendMessage}>
              SEND
            </button>
          </form>
        </div>
      );
    }
    export default ChatMsg;
    

    【讨论】:

      【解决方案2】:

      这个错误信息是什么意思? FirebaseError:函数 CollectionReference.doc() 要求它的第一个参数是类型 非空字符串,但它是:true

      这意味着您需要传递一个字符串作为doc() 方法的参数。

      您正在将channelId 传递给doc() 方法,它似乎是一个值为true 的布尔值。您需要传递一个代表 Firestore 文档 ID 的字符串。我猜是channelName,不是吗?


      此外,您的代码中还有另一个问题:您将 JavaScript 对象传递给 collection() 方法。


      如果你想“提交消息”,你需要例如调用CollectionReference上的add()方法。

      类似于以下内容(我们不知道您要使用的子集合名称,让我们使用“消息”):

      db.collection("rooms").doc(channelName).collection('messages')
        .add({
             message: input,
             timestamp: firebase.firestore.FieldValue.serverTimestamp,
             user: user.displayName,
             userImage: user.photoURL,
        }); 
      

      我建议你看看文档:https://firebase.google.com/docs/firestore/manage-data/add-data

      【讨论】:

      • 是的,这正是我正在尝试做的事情,并且使用子集合“消息”,添加缺少的参数后,我仍然会收到指向同一行的相同消息。我在“所做的更改”“所做的更改 2”问题中添加了图片
      • 嗨 Lucas,您有机会查看更新吗?如果它解决了您的问题,请接受答案。谢谢
      • 是的,我做到了,但最终没有任何迹象表明可以接受...我投了赞成票,但是(这就是你的意思吗?)它只会显示我再达到 14 分...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 2017-12-12
      • 2018-09-13
      • 2018-12-13
      • 1970-01-01
      相关资源
      最近更新 更多