You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:43:11