React新手开发导航栏时遇到JS代码无响应问题求助
问题修正点
- 事件绑定错误:React 中的点击事件属性名为驼峰格式
onClick,不是原生 HTML 的onclick。另外你当前写的onClick={this.openNav()}会在组件渲染时直接执行函数,不是点击后才触发,需要去掉括号,写成onClick={this.openNav}才是绑定函数引用。 - 函数逻辑为空:你写的
openNav和closeNav仅获取了侧边栏 DOM 节点,没有执行任何修改样式/显隐状态的操作,自然不会有交互效果。更符合 React 开发规范的方式是用 state 控制侧边栏状态,而非直接操作 DOM。 - 类名属性错误:React 中指定元素类名要使用
className,不能用class,class是 JavaScript 保留关键字,直接写会不生效。 - 冗余的 script 标签:React 组件的 JSX 中不需要写
<script>标签放逻辑,所有交互逻辑都可以写在组件类的方法里。
修正后完整代码
组件代码(Nav.jsx)
import React, {Component} from 'react'; import './Nav.css' class Nav extends Component { // 用state控制侧边栏是否展开 state = { isNavOpen: false } openNav = () =>{ this.setState({isNavOpen: true}) } closeNav = () => { this.setState({isNavOpen: false}) } render() { return( <div id="main"> <div id="mySidenav" className={`sidenav ${this.state.isNavOpen ? 'open' : ''}`}> <a href="javascript:void(0)" className="closebtn" onClick={this.closeNav}>×</a> <a href="#">About</a> <a href="#">Services</a> <a href="#">Clients</a> <a href="#">Contact</a> </div> <h2>Animated Sidenav Example</h2> <p>Click on the element below to open the side navigation menu.</p> <span onClick={this.openNav}>open</span> </div> ); } } export default Nav;
配套样式文件(Nav.css)
.sidenav { width: 0; height: 100%; position: fixed; top: 0; left: 0; background-color: #111; overflow-x: hidden; transition: 0.5s; padding-top: 60px; } .sidenav.open { width: 250px; } .sidenav a { padding: 8px 8px 8px 32px; text-decoration: none; font-size: 25px; color: #818181; display: block; transition: 0.3s; } .sidenav a:hover { color: #f1f1f1; } .sidenav .closebtn { position: absolute; top: 0; right: 25px; font-size: 36px; margin-left: 50px; } #main { transition: margin-left .5s; padding: 20px; }
内容的提问来源于stack exchange,提问作者hozerpffp2009
相关产品推荐
相关产品推荐

