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

React.jsx项目中使用map渲染侧边栏组件元素异常求助

React + Tailwind 侧边栏map渲染问题解决

问题分析与修复点:

  1. 图标未正常渲染
    你在sidebardata.js中把图标组件直接赋值给icon字段,但在sidebar.jsx里直接用{menu.icon}只会输出组件类,不会渲染成实际图标。必须以React组件标签的形式调用:

    // 错误写法
    {menu.icon}
    // 正确写法
    <menu.icon />
    
  2. 深色模式hover样式失效
    Tailwind的深色模式伪类语法是dark:hover:xxx,不是dark-hover:xxx,修改li的className:

    // 错误写法
    hover:text-blue-600 dark-hover:text-blue-300
    // 正确写法
    hover:text-blue-600 dark:hover:text-blue-300
    
  3. HTML语义化错误
    <li>元素必须包裹在<ul>或<ol>内,否则不符合HTML规范,可能导致样式或浏览器行为异常。在nav中添加<ul className="w-full">包裹所有map生成的li。

修改后的完整sidebar.jsx代码:

import React, { useState } from "react";
import { menus } from "../data/sidebardata";

function Sidebar() {
    const [open, setOpen] = useState(false);

    return (
        <>
            <div className="h-screen w-full flex overflow-hidden select-none">
                <nav className={`w-24 flex flex-col items-center bg-white dark:bg-gray-800 py-4 ${open ? 'block' : 'hidden'}`}>
                    <ul className="w-full">
                        {menus.map((menu, index) => (
                            <li key={index} className="mt-3 p-2 hover:text-blue-600 dark:hover:text-blue-300 rounded-lg">
                                <a href={menu.link} className="flex flex-col items-center">
                                    <menu.icon />
                                    <span className="text-xs mt-2">{menu.name}</span>
                                </a>
                            </li>
                        ))}
                    </ul>
                </nav>
                <button onClick={() => setOpen(!open)}>Toggle Sidebar</button>
            </div>
        </>
    );
}

export default Sidebar;

额外提示:

  • 如果希望侧边栏默认显示,把useState(false)改成useState(true)即可。
  • 建议给菜单添加唯一id字段,用menu.id作为key,比index更稳定,避免列表重新排序时的渲染异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:33:19