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

React中状态为空数组时,如何实现文本的条件渲染?

修复React Navbar组件的条件渲染逻辑

原代码的问题

  • 数组判断错误:menu === []永远不会成立,因为数组是引用类型,即便都是空数组,它们的内存地址也不一样,正确的判断方式是检查menu.length === 0
  • 无限渲染循环:在组件函数体直接调用setMenu,会触发组件重新渲染,渲染后又会执行这段判断,陷入无限循环
  • 逻辑偏离需求:需求是空数组时渲染文本,不是把状态改成包含文本的数组,原做法会导致后续map渲染的是这个文本字符串,不符合预期

正确实现代码

const Navbar = () => {
    const [menu, setMenu] = useState([]);

    // 若需从API获取菜单数据,可在此添加请求逻辑
    // useEffect(() => {
    //   fetch('/api/menu')
    //     .then(res => res.json())
    //     .then(data => setMenu(data))
    //     .catch(err => console.error(err));
    // }, []);

    return (
        <div className='nav-area'>
            <Link to='/' className='logo'>LOGO</Link>
            <ul className='menus'>
                {/* 条件渲染:数组为空时显示文本,否则渲染菜单 */}
                {menu.length === 0 ? (
                    <li>menu is empty</li>
                ) : (
                    menu.map((main) => (
                        <MenuItems items={main} key={main.type}/>
                    ))
                )}
            </ul>
        </div>
    );
};

export default Navbar;

关键说明

  • 用menu.length === 0准确判断数组是否为空
  • 直接在JSX中做条件渲染,避免修改状态导致的副作用
  • 如果后续要从API加载菜单数据,把请求逻辑放在useEffect里,确保只在组件挂载时执行一次

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:12:21