You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}>&times;</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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:06:04