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

React/Next.js垂直菜单点击切换仅展示单个内容的实现咨询

解决方案

核心改动是将分散的多个状态合并为单一激活状态,统一控制展开逻辑,修改后的完整代码如下:

import {useState} from "react";

export default function Test() {
    // 存储当前展开的内容ID,null表示所有内容都收起
    const [activeId, setActiveId] = useState<number | null>(null);

    // 统一的点击处理逻辑
    const handleClick = (id: number) => {
        // 如果点击的是当前已展开的项,直接收起
        if (activeId === id) {
            setActiveId(null);
            return
        }
        // 否则替换为当前点击的项,自动收起上一个
        setActiveId(id)
    }

    return (
        <div>
            <div onClick={() => handleClick(1)}>
                点击展示内容1
                <div>
                    {activeId === 1 && <Content_1 />}
                </div>
            </div>
            <div onClick={() => handleClick(2)}>
                点击展示内容2
                <div>
                    {activeId === 2 && <Content_2 />}
                </div>
            </div>
            <div onClick={() => handleClick(3)}>
                点击展示内容3
                <div>
                    {activeId === 3 && <Content_3 />}
                </div>
            </div>
        </div>
    )
}

const Content_1 = () => {
    return (
        <p>内容1</p>
    )
}
const Content_2 = () => {
    return (
        <p>内容2</p>
    )
}
const Content_3 = () => {
    return (
        <p>内容3</p>
    )
}

如果后续需要新增菜单项,只要新增对应ID和内容组件,无需额外新增状态,可维护性更高。

内容的提问来源于stack exchange,提问作者Rodrigo Yañez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:06:04