在反应选项卡上设置(棘手的)活动 class

Setting a (tricky) active class on react tabs

我有一些非常基本的 React 选项卡:

  const tabItems = ['Tab 1', 'Tab 2'];

  function TabGroup() {
    const [activeItem, setActive] = useState(tabItems[0]);
    return (
      <>      
        <div className={styles.tabs}>
          {tabItems.map(tabItem => (
            <button
              className={activeItem === tabItem ? "on" : "off"}
              onClick={() => setActive(tabItem)}
            >
              {tabItem}
            </button>
          ))}
        </div>
        <p>Active Tab: {activeItem} </p>
      </>
    );
  }

工作正常,但我们的项目使用 CSS 的模块,在文件顶部像这样导入:

import styles from 'styles/wallet.module.scss'

从 wallet.module.scss 调用 CSS class 意味着您必须像这样引用它们:

<div className={styles.foo}></div>

所以我的问题是...回到我的选项卡的原始示例,我需要 activeItem 的 className 来获取类似 {styles.on} 的内容,例如;

        <button
          className={activeItem === tabItem ? {styles.on} : {styles.off}}
          onClick={() => setActive(tabItem)}
        >

但是在 activeItem == tabItem 检查中这样调用它们会引发错误:

./components/wallet.js
Error: 
  x Unexpected token `.`. Expected ... , *,  (, [, :, , ?, = or an identifier
    ,----
 24 | className={activeItem === tabItem ? {styles.on} : {styles.off}}
    :                                            ^
    `----

Caused by:
    0: failed to process input file
    1: Syntax Error

我已经尝试了各种输入方式,但不确定哪种语法魔术可以让我在这里得到我想要的东西?有什么想法吗?

谢谢!

我真是个白痴。您只是不能包含大括号。

这个有效:

        <button
          className={activeItem === tabItem ? styles.on : styles.off}
          onClick={() => setActive(tabItem)}
        >

尝试移除样式周围的括号。

 className={activeItem === tabItem ? styles.on : styles.off}

第一组花括号表示jsx。