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

基于semantic-ui-react实现点击菜单项动态展示Sidebar.Pusher内容

实现侧边栏菜单项切换动态内容的方案

你想实现的是点击侧边栏菜单项,在Sidebar.Pusher区域动态展示对应内容对吧?这在React结合Semantic UI的场景下很容易实现,核心思路就是用状态跟踪当前选中的菜单项,然后根据状态渲染对应的内容块。下面是完整的实现代码和关键点说明:

步骤1:设置状态管理与点击逻辑

首先我们用React的useState记录当前选中的菜单项,同时给每个菜单项绑定点击事件来更新状态:

import React, { useState } from 'react';
import { Sidebar, Menu, Icon, Segment } from 'semantic-ui-react';

const DynamicSidebar = () => {
  const [visible, setVisible] = useState(false);
  // 新增状态:跟踪当前激活的菜单项
  const [activeItem, setActiveItem] = useState('categories');

  // 处理菜单项点击的函数
  const handleItemClick = (e, { name }) => {
    setActiveItem(name);
    // 可选:点击后自动收起侧边栏
    // setVisible(false);
  };

  // 根据当前激活项渲染对应内容
  const renderDynamicContent = () => {
    switch(activeItem) {
      case 'categories':
        return <Segment basic>
          <h3>分类管理页面</h3>
          <p>这里可以放置分类的新增、编辑、删除等操作模块</p>
        </Segment>;
      case 'products':
        return <Segment basic>
          <h3>产品管理页面</h3>
          <p>这里可以展示产品列表、库存管理、产品编辑等功能</p>
        </Segment>;
      default:
        return <Segment basic>
          <h3>欢迎页</h3>
          <p>请选择左侧菜单进入对应功能页面</p>
        </Segment>;
    }
  };

  return (
    <Sidebar.Pushable>
      <Sidebar 
        as={Menu} 
        animation='push' 
        width='thin' 
        visible={visible} 
        icon='labeled' 
        vertical 
        inverted
      >
        <Menu.Item 
          name='categories' 
          active={activeItem === 'categories'}
          onClick={handleItemClick}
        >
          <Icon name='tasks' /> Manage categories
        </Menu.Item>
        <Menu.Item 
          name='products' 
          active={activeItem === 'products'}
          onClick={handleItemClick}
        >
          <Icon name='tasks' /> Manage products
        </Menu.Item>
      </Sidebar>
      <Sidebar.Pusher>
        {/* 渲染动态内容的核心区域 */}
        {renderDynamicContent()}
      </Sidebar.Pusher>
    </Sidebar.Pushable>
  );
};

export default DynamicSidebar;

核心关键点说明:

  • 状态跟踪:用activeItem变量记录当前选中的菜单项,点击时通过handleItemClick更新状态
  • 激活样式反馈:给每个Menu.Item添加active属性,根据activeItem的值自动高亮当前选中项
  • 动态内容渲染:通过renderDynamicContent函数,根据activeItem的不同返回对应的内容块,你可以把这些内容替换成自己的业务组件(比如CategoryManager、ProductList)
  • 可选优化:如果希望点击菜单项后自动收起侧边栏,只需在handleItemClick里加上setVisible(false)即可

这样就能轻松实现侧边栏菜单与主内容区的联动切换啦~

内容的提问来源于stack exchange,提问作者Chetan Gawai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:44:47