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

React如何从箭头函数返回字符串并应用于ClassName属性

问题原因

你在绑定className时直接传入了openedClassName函数本身,没有主动调用该函数,JSX渲染时会自动将函数对象转为字符串,因此最终类名变成了函数体的文本内容。

修复方案

方案1:调用已定义的函数

只需要给模板字符串中的openedClassName加上调用括号即可,修改对应代码行:

// 原错误写法
<div id="collapse1" className={`${openedClassName}`}>
// 修正后写法
<div id="collapse1" className={`${openedClassName()}`}>

方案2:简化逻辑(可选)

这种简单的类名拼接场景不需要额外定义函数,可以直接在模板字符串中使用三元表达式,代码更简洁:

<div id="collapse1" className={`collapse ${isOpened ? 'show' : ''}`}>

修正后完整的组件代码示例:

import { useState } from "react";

export const Sidebar = () => {
    const [isOpened, setIsOpened] = useState(false);

    const handleClick = () => {
        setIsOpened(!isOpened);
    }

    return (
        <ul className="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar">
            <li className="nav-item active">
                <a className="nav-link" href="#" onClick={handleClick}>
                    <i className="fas fa-fw fa-folder"></i>
                    <span>Pages</span>
                </a>
                <div id="collapse1" className={`collapse ${isOpened ? 'show' : ''}`}>
                    <div className="bg-white py-2 collapse-inner rounded">
                        <a className="collapse-item" href="login.html">Login</a>
                    </div>
                </div>
            </li>
            <div className="text-center d-none d-md-inline">
                <button className="rounded-circle border-0" id="sidebarToggle"></button>
            </div>
        </ul>
    );
}

export default Sidebar;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:15:03