Не удается установить динамическое имя класса

#reactjs

#reactjs

Вопрос:

У меня есть этот компонент:

 const MyComponent = () => {
    const [tab, setTab] = useState("tab1");
    
    return(
    <>  
        <a href="#" id="tab1-tab" className="{`someclass ${tab == 'tab1' ? 'active' : ''}`}">Tab1{tab}</a>
        <a href="#" id="tab2-tab">Tab1</a>
    </>
    );
}    
 

Если я избегу установки динамического имени класса и наличия:

 className="active"    
 

для первой вкладки она будет выделена (подчеркнута css).

Но выполнение действий, описанных выше, не приведет к выбору первой вкладки. Как вы можете видеть, useState устанавливает переменную «tab» = «tab1». Он также печатается, и я вижу на странице, что «tab» равно «tab1». Однако использование троичного оператора, похоже, не работает. Я перепробовал много вариантов, но большая часть примера показывает троичный с логическими значениями (в то время как в моем случае это сравнение строк), и я не знаю, может ли это быть проблемой (т. Е. синтаксис должен быть другим).

Комментарии:

1.вы должны использовать npmjs.com/package/clsx clsx для динамических классов.

2. Удалить «» в свойстве className, должно быть className={ someclass ${tab == 'tab1' ? 'active' : ''} }

Ответ №1:

Убедитесь, что вы правильно используете шаблонные литералы:

 const MyComponent = () => {
    const [tab, setTab] = useState("tab1");
    
    return(
    <>  
        <a href="#" id="tab1-tab" className={`someclass ${tab == 'tab1' ? 'active' : ''}`}>Tab1{tab}</a>
        <a href="#" id="tab2-tab">Tab1</a>
    </>
    );
}