redux 类型错误:u.indexOf不是Reactjs和Firebase的函数

8tntrjer  于 2022-11-12  发布在  React
关注(0)|答案(3)|浏览(140)

我在执行此教程时遇到以下错误https://www.youtube.com/watch?v=QiTq5WrWoJw&t=8176s
我在将我的个人消息连接到我的firebase应用程序时遇到了问题。我在控制台中的错误主要集中在以下代码上。
我试图发送一个信息在一个individiual“房间”内的firebase,所以一个收集的房间与独特的信息在每个房间内。

function ChatInput(channelName, channelId) {

    const [input, setInput] = useState('');

    const sendMessage = (e) => {
        e.preventDefault(); //prevents refresh of the page

        if(!channelId) {
            return false;
        }
            db.collection("rooms").doc(channelId).collection("messages").add({
              message: input,
              timestamp: firebase.firestore.FieldValue.serverTimestamp(),
              user: 'Daniel Peters',
              userImage:'https://wallpapercave.com/wp/j8Sd6Uv.jpg',

            });

            setInput('');
    };

    return (
        <ChatInputContainer>
            <form>
                <input value={input} onChange={(e) => setInput(e.target.value)} placeholder= {`Message #${channelName}`} />
                <Button hidden type='submit' onClick={sendMessage}>
                    SEND
                </Button>
            </form>

        </ChatInputContainer>
    )
}

export default ChatInput;

我已经尝试了不同版本的redux和firebase,看看这是否是问题所在,但问题显然没有解决。任何指导都将是伟大的!

r9f1avp5

r9f1avp51#

我只是面对这个问题,最终我的“错误”是我试图使用数字ID作为Firestore文档密钥。
因此,这个函数给出了u.indexOf is not a function错误:

let ref = db.collection(`userPreferences/${userId}/venues`).doc(venue.id);

这一个工作的地方:

let ref = db.collection(`userPreferences/${userId}/venues`).doc(`${venue.id}`);

我只是用引号把第二个字符串括起来,希望这能帮到别人!

56lgkhnf

56lgkhnf2#

我通过将键名从数字更改为字符串修复了此错误:

export const addRecord = async () => {
    for (let i = 1; i < 3; i++) {
        const keyName = i + '' // converting the number to a string is the solution!
        await setDoc(doc(db, "names", keyName), {
            name: "hello world",
        })
    }
}
jchrr9hc

jchrr9hc3#

在本例中,生成channelId字符串,然后传递给doc()
就像:

function ChatInput(channelName, channelId) {

const [input, setInput] = useState('');

const sendMessage = (e) => {
    e.preventDefault(); //prevents refresh of the page

    if(!channelId) {
        return false;
    }
        db.collection("rooms").doc(`${channelId}`).collection("messages").add({
          message: input,
          timestamp: firebase.firestore.FieldValue.serverTimestamp(),
          user: 'Daniel Peters',
          userImage:'https://wallpapercave.com/wp/j8Sd6Uv.jpg',

        });

        setInput('');
};

return (
    <ChatInputContainer>
        <form>
            <input value={input} onChange={(e) => setInput(e.target.value)} placeholder= {`Message #${channelName}`} />
            <Button hidden type='submit' onClick={sendMessage}>
                SEND
            </Button>
        </form>

    </ChatInputContainer>
)

}
导出默认聊天输入;

相关问题