reactjs - 为什么在 React.js 中的 componentDidMount 之前没有渲染元素?
问题描述
我没有找到这个元素<div className="sc" id="firechat-wrapper"></div>
据我所知,首先render
发生然后componentDidMount
根据 React LefeCycle 发生。这段代码有什么问题?下面是代码。
// eslint-disable-next-line no-unused-vars
import React, { Component } from "react";
import { FirebaseContext } from "../firebase";
const menuItems = [
{ id: 1, name: "Profile", class: "icon-user", level: 0 },
];
class Home extends Component {
static contextType = FirebaseContext;
constructor(props) {
super(props);
this.state = { menuItems: menuItems, activeMenuLevel0: null
};
this.handleClick = this.handleClick.bind(this);
this.handleContextMenu = this.handleContextMenu.bind(this);
}
componentDidMount() {
this.context.auth.onAuthStateChanged(function(user) {
if (user) {
console.log(user.uid);
var self = this;
var elem = document.getElementById("firechat-wrapper");
var chatRef = this.context.database.ref();
// eslint-disable-next-line no-undef
this.chat = new FirechatUI(chatRef, elem);
self.chat.setUser(user.uid, user.displayName);
}
});
}
handleClick(event, menuItem) {
event.preventDefault();
this.handleContextMenu(menuItem);
console.log("handle click");
}
handleContextMenu(menuItem) {
console.log("Handle context menu level");
this.setState({ activeMenuLevel0: menuItem });
}
render() {
const { expended } = this.state;
return (
<>
<footer className="footerBox">
<Menu items={this.state.menuItems} onMenuItemClick={this.handleClick}></Menu>
{this.state.activeMenuLevel0 ?
(<>
{this.state.activeMenuLevel0 && this.state.activeMenuLevel0.id == 1 &&
<>
<div className="sc" id="firechat-wrapper"></div>
</>
}
</>)
: null}
</footer>
</>
);
}
}
export default Home;
解决方案
您用于有条件activeMenuLevel0
地渲染<div className="sc" id="firechat-wrapper"></div>
,因此在第一次渲染后,activeMenuLevel0
值为 null,因此您得到了 null。它只是在handleClick
被调用时呈现。
推荐阅读
- python - 我的 heroku 应用程序无法导入 Phonenumber_field 模块
- django - 如何在 django 中扩展具有许多可选模型的模型?
- selenium - 我在 TestNG 中遇到问题,一次只能使用一个注释
- c# - 通用转换/映射源 JSON 到不同的目标 JSON
- c - 将额外的空字符附加到宽字符串
- powershell - 什么是 Powershell ${^} 变量?
- python - 将反引号 (`) + 小数的字符串转换为浮点数
- java - 使用 Spring 安全性在 Thymeleaf 中静态资源的可见性
- process - 向子进程发送 SIGSTOP
- postgresql - 根据列的非空值百分比更新列中的空值