Попробуйте это:
render() {
return (
<ul>
{this.props.users.map((user, i) => {
return (
<li
key={i}
// You might not need className on the <li>
>
<h2>
{user.username}
<div
className={`circle ${
user.active ? "circle--online" : "circle--offline"
}`}
/>
</h2>
<h4>Joined: {moment(user.joined).format("MMM Do YY")}</h4>
</li>
);
})}
</ul>
);
}
А затем ваш SASS:
.circle {
&--online {
color: green;
}
&--offline {
color: red;
}
}
Есть несколько вещей, которые я рекомендую.
Подумайте о наличии "по умолчанию""состояние для ваших компонентов, а затем условно применяя модификатор.Вместо ...
"member-info " + (user.active ? "online" : "offline")
... попробуйте трактовать "offline" как состояние по умолчанию, а затем условно добавить "online" в качестве единственного модификатора.
Есть очень легкий пакет(с нулевыми зависимостями) называется Имена классов .Это позволяет вам легче создавать строки условных классов:
import classNames from "classnames";
const classes = classNames("member-info", {
"member-info--online": true // <-- String: Boolean
}); // => "member-info member-info--online"
Имея только состояние по умолчанию и измененное состояние, я могу удалить половину этого SASS выше.Предположим, что «круг» сам по себе означает автономный режим, а «круг - онлайн» означает онлайн:
.circle {
color: red;
&--online {
color: green;
}
}
Это соглашение об именах с двойными черточками называется BEM , и это очень хорошо подходит для SASS.