isomorphic-style-loader - Как добавить "активный" класс
Я использую реагирующий стартовый набор и создаю компонент списка, который выглядит следующим образом:
import React from 'react';
import withStyles from 'isomorphic-style-loader/lib/withStyles';
import s from './CommandList.css';
const CommandList = () => {
return (
<ul className={s.commandList}>
{data.commands.map((command, index) => (
<li
key={index}
className={s.commandListItem}>
{command.command}
</li>
))}
</ul>
);
};
export default withStyles(s)(CommandList);
Я пытаюсь добавить "активный" класс в мой li
пункт, но не знаете, как к этому? Я пытался использовать classnames
библиотека, но не уверен, как получить второй класс из моих стилей. Когда я просто передаю строку "active", стили не импортируются.
import cx from 'classnames';
<li className={cx(s.commandListItem, {'active': command.active })}>
У меня вопрос, как бы я сделал что-то вроде:
<li className={cx(s.commandListItem, {s.active: command.active })}>
3 ответа
Догадаться. Я использовал classnames
неправильно. Мне нужно было импортировать classnames/bind
,
import s from './CommandList.css';
import classnames from 'classnames/bind';
let cx = classnames.bind(s);
Затем я могу просто передать "активную" строку, как я хотел:
<li className={cx(s.commandListItem, {'active': command.active })}>
cx
имя вар теперь имеет больше смысла
<li className={cx(s.commandListItem, {[s.active]: command.active })}>
увидеть []
обозначение ключа объекта
className в React является String, и вы должны преобразовать весь объект в String
Сначала создайте массив классов, которые вы хотите назначить классу
Затем преобразовать массив имени класса в строку
className={[s.commandListItem, 'active'].join('')}