javascript - 如何在按钮单击时更改不同组件的样式?
问题描述
我想在单击按钮时将 100% 的宽度应用于我的导航栏。最初,它将是 0%(隐藏)。为此,我使用一个状态来跟踪导航栏的宽度,但是,我的状态似乎不会改变 onclick。
class Navbar extends Component {
constructor(){
super();
this.state = {
sidenav: {
width: '0%',
}
}
}
showNavBar = () => {
this.setState({
sidenav: {
width: '100%',
}
})
}
render(){
return(
<div>
<div className ="sidenav" style ={{width : this.state.sidenav.width}}>
<NavLink exact to="/">Home</NavLink>
<NavLink exact to="/about">About</NavLink>
<NavLink exact to="/portfolio">Portfolio</NavLink>
<NavLink exact to="/contacts">Contacts</NavLink>
<div className="content">
<Route exact path="/" component={Home} />
<Route exact path="/about" component={About} />
<Route exact path="/portfolio" component={Portfolio} />
<Route exact path="/contacts" component={Contacts} />
</div>
</div>
<NavbarButton onClick={this.showNavBar}/>
</div>
)
}
};
谁能指出我哪里出错了?
编辑:
因此,我按照你们发布的示例进行操作,并且仅当我在渲染函数中明确给出时才使其正常工作。
所以这是我的 NavBarbutton 代码,也许有人能看出它为什么错了?
const NavbarButton = (props) => {
return (
<button style = {style} onClick = {props.showNavBar}>☰</button>
)
}
解决方案
您的代码工作正常,即宽度从 0% 变为 100%。
这是从您提供的代码派生的代码框。
https://codesandbox.io/s/lx24555w8z
如果要在单击时显示导航栏,则可能使用显示属性而不是宽度。
推荐阅读
- typescript - 如何在本地文件中导入数组以用于 Vue 3 TypeScript 项目?
- macos - 如何限制 SwiftUI macOS 应用程序中的窗口实例?
- python - 多处理暂停 1 个代码,而另一个处于活动状态?
- java - SpringBoot:EclipseLink 与 H2
- git - VSCode:提交 VSCode 在项目中使用的扩展列表的最佳方式是什么?
- flutter - Flutter with Translator:为什么参数类型是“未来”
'不能分配给参数类型'String'? - sql - Oracle Case 语句在查询返回 null 时写入零
- r - 如何使用变量调用R中的表和列
- r - Geom_line 基于 y 轴连接几何点?
- javascript - Javascript document.write 只会在 For 循环内打印