【发布时间】:2020-01-22 20:27:45
【问题描述】:
我正在从 App.js 渲染我唯一的组件,如下所示:
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {gameState: "Menu"};
}
render() {
return (
<div>
{<MenuCanvas/> && this.state === {gameState: "Menu"}}
</div>
)
}
}
Menu 组件看起来像这样
export default class MenuCanvas extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<div>
<canvas id="menu-canvas" width="800" height="800"></canvas>
</div>
)
}
componentDidUpdate() {
startMenuLogic();
}
}
startMenuLogic() 函数,在 componentDidMount 中调用是一个 JavaScript 函数,目前只能找到正在渲染的画布
canvas = document.getElementById('menu-canvas');
问题是画布是空的,即使在componentDidMount中调用了该函数,奇怪的是画布不是空的,直到我在App.js中添加了带有状态的条件渲染。在此之前,我的 App.js simple 总是返回,一切都很好。可能是什么问题,我该如何解决?
【问题讨论】:
-
this.state === {gameState: "Menu"} 将返回 false,因为当您在 JS 中比较对象时,它们会比较内存分配空间,而不是您认为的相等性。你想要的是 this.state.gameState === "Menu"
-
没错,这永远不会是真的,因为您正在创建一个新对象,这意味着引用将不匹配。
-
我刚刚注意到并修复了它。下面的两个答案有助于解决问题。
标签: javascript reactjs