如何修复React.js中Firebase Firechat的chat.setUser不是函数错误
解决
chat.setUser is not a function 错误 这个问题的核心是你混淆了Firechat核心实例与UI组件的职责——setUser是Firechat核心类的方法,而非FirechatUI实例的方法。咱们来一步步修正:
1. 调整导入方式
你需要同时导入Firechat的核心类和UI组件,确保能获取到正确的构造函数:
import { Firechat, FirechatUI } from 'firechat';
2. 正确初始化实例流程
先创建Firechat核心实例(处理聊天逻辑、用户状态),再将其传入FirechatUI实例(负责界面渲染):
修改你的componentDidMount方法:
componentDidMount() { const elem = document.getElementById("firechat-wrapper"); const chatRef = this.context.database.ref(); // 第一步:初始化Firechat核心实例 const chat = new Firechat(chatRef); // 第二步:创建FirechatUI实例,关联核心实例和DOM容器 const chatUI = new FirechatUI(chat, elem); this.context.auth.onAuthStateChanged(function(user) { if (user) { // 调用核心实例的setUser方法设置当前用户 chat.setUser(user.uid, user.displayName); } }); }
错误原因说明
你之前直接通过FirechatUI创建了实例,但FirechatUI只是负责渲染界面的外层组件,真正处理用户认证、消息管理等核心逻辑的是Firechat类。因此setUser方法属于Firechat实例,而非FirechatUI实例,这才导致了not a function的报错。
完整修正后的代码
import React, { Component } from "react"; import { FirebaseContext } from "../../firebase"; import { Firechat, FirechatUI } from 'firechat'; class PublicChat extends Component { static contextType = FirebaseContext; constructor(props) { super(props); }; componentDidMount() { const elem = document.getElementById("firechat-wrapper"); const chatRef = this.context.database.ref(); const chat = new Firechat(chatRef); const chatUI = new FirechatUI(chat, elem); this.context.auth.onAuthStateChanged(function(user) { if (user) { chat.setUser(user.uid, user.displayName); } }); } render() { return ( <> <div id="firechat-wrapper"></div> </> ); } } export default PublicChat;
内容的提问来源于stack exchange,提问作者Jamshaid Alam
相关产品推荐
相关产品推荐

