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

基于React与Refine.js的后台管理面板侧边栏菜单自定义求助

在Refine.js项目中自定义带汉堡菜单的侧边栏

先明确默认侧边栏的来源

如果你用的是Refine官方预设的UI框架(比如Ant Design、MUI),默认侧边栏是Refine内置的组件,不会出现在你的项目components目录里——它属于对应UI插件(比如@refinedev/antd)的内置模块。

自定义的具体步骤

  1. 定位根布局文件
    项目的布局入口通常在src/App.jsx,或者单独的src/layouts/MainLayout.jsx文件中。这里会引入Refine的布局组件(比如RefineAntdLayout),是替换侧边栏的核心入口。

  2. 编写自定义侧边栏组件
    在src/components/CustomSidebar.jsx中创建带汉堡切换的侧边栏:

    import { useState } from "react";
    import { Layout, Menu, Button } from "antd";
    import { MenuUnfoldOutlined, MenuFoldOutlined } from "@ant-design/icons";
    import { useMenu } from "@refinedev/core";
    
    const { Sider } = Layout;
    
    const CustomSidebar = () => {
      const [collapsed, setCollapsed] = useState(false);
      // 用Refine的useMenu自动生成路由对应的菜单列表
      const { menuItems } = useMenu();
    
      return (
        <Sider trigger={null} collapsible collapsed={collapsed} width={250}>
          <div style={{ padding: "16px", textAlign: "center", fontWeight: 600 }}>新闻后台</div>
          {/* 汉堡切换按钮 */}
          <Button
            type="text"
            icon={collapsed ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}
            onClick={() => setCollapsed(!collapsed)}
            style={{ fontSize: "16px", width: "100%", height: "64px" }}
          />
          {/* 渲染系统菜单 */}
          <Menu
            mode="inline"
            selectedKeys={[window.location.pathname]}
            items={menuItems}
          />
        </Sider>
      );
    };
    
    export default CustomSidebar;
    
  3. 替换默认侧边栏
    在布局文件中,将自定义侧边栏通过布局组件的sidebar属性传入:

    import { RefineAntdLayout } from "@refinedev/antd";
    import CustomSidebar from "../components/CustomSidebar";
    
    const MainLayout = ({ children }) => {
      return (
        <RefineAntdLayout sidebar={<CustomSidebar />}>
          {children}
        </RefineAntdLayout>
      );
    };
    
    export default MainLayout;
    
  4. 关联到Refine核心配置
    如果src/App.jsx里还没指定自定义布局,需要把布局传给<Refine>组件的layout属性:

    import { Refine } from "@refinedev/core";
    import { RefineAntd } from "@refinedev/antd";
    import MainLayout from "./layouts/MainLayout";
    // 导入你的数据源、路由等配置
    
    function App() {
      return (
        <Refine
          dataProvider={...} // 你的数据源配置
          layout={MainLayout}
          plugins={[RefineAntd()]}
          // 其他必要配置项
        >
          {/* 路由配置 */}
        </Refine>
      );
    }
    
    export default App;
    

找不到布局文件的处理方式

如果项目里没有单独的布局文件,直接查看src/App.jsx里的<Refine>组件——如果未设置layout属性,说明当前用的是Refine默认布局,你只需要按上面的步骤创建布局组件并传入即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:22:49