javascript - 状态更改未重新呈现组件概念问题
问题描述
我有以下 Javascript 代码
class Navbar extends React.Component {
constructor(props) {
super(props);
this.state = {isVisible: false};
}
render() {
console.log('hi')
return(
<div className = 'navbar'>
<div className = 'nav-button'
onClick = {() => this.setState({isVisible: !this.state.isVisible})}>
</div>
<div className = 'navbar-content row'>
<div className="navbar-item col s1 offset-s6"><h5 className="center-align">Home</h5></div>
<div className="navbar-item col s1"><h5 className="center-align">About</h5></div>
<div className="navbar-item col s1"><h5 className="center-align">Home</h5></div>
<div className="navbar-item col s1"><h5 className="center-align">About</h5></div>
</div>
</div>
);
}
}
当我单击“导航按钮”时,我应该调用 setState 来更改 isVisible 组件,因此该组件应该重新渲染,并且我应该期望控制台记录“hi”。然而,这并没有发生。我想知道为什么组件没有重新渲染。
但是,当我删除导航栏下方的 div 标签时,组件会成功重新渲染。
class Navbar extends React.Component {
constructor(props) {
super(props);
this.state = {isVisible: false};
}
render() {
console.log('hi')
return(
<div className = 'navbar'>
<div className = 'nav-button'
onClick = {() => this.setState({isVisible: !this.state.isVisible})}>
</div>
</div>
);
}
}
解决方案
div
如果没有内容,您如何单击?我相信你错了,你一开始就触发了onClick
。下面你可以看到一个简化的运行示例,它实际上是如何工作的(可点击的div
现在有一个标签“测试”)。
class Navbar extends React.Component {
constructor(props) {
super(props);
this.state = {isVisible: false};
}
render() {
console.log('hi')
return(
<div className = 'navbar'>
<div className = 'nav-button'
onClick = {() => this.setState({isVisible: !this.isVisible})}>test
</div>
<div className = 'navbar-content row'>
<div className="navbar-item col s1 offset-s6"><h5 className="center-align">Home</h5></div>
<div className="navbar-item col s1"><h5 className="center-align">About</h5></div>
<div className="navbar-item col s1"><h5 className="center-align">Home</h5></div>
<div className="navbar-item col s1"><h5 className="center-align">About</h5></div>
</div>
</div>
);
}
}
ReactDOM.render(<Navbar />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root" />
推荐阅读
- r - 当我使用 actionbutton 从数据框列输入基因时,如何获得条形图?
- javascript - 我收到格式为“15-03-2021 13:06:29”IST 的响应我如何根据用户时区进行转换
- python - 如何将数据从 Excel 输入 Python 字典?
- c# - 完全暂停一个场景,同时保持其他场景处于活动状态
- database - Wildfly 数据库连接池问题
- javascript - 如何使用 selenium python 使用 send_keys 发送长文本
- vue.js - 如何在 Nuxt.js 中使用 Vue 测试库?
- wordpress - 这个 WordPress 网站使用什么文件下载方法?
- google-apps-script - 谷歌应用程序,加载项,“您无权调用 getUserProperties”
- linux - 仪表板不适用于 https - K8s 版本 - v1.19.6