Я пытаюсь преобразовать свой проект из CSS в стилизованный компонент (https://styled-components.com/) , на данный момент я преобразовал все свои другие компоненты, кроме одного компонента, который я застрял, проверил другие примеры из stackoverflow, но это было не то же самое. У меня есть условные имена классов
Мой вопрос заключается в том, как преобразовать компонент InfoBox для использования стилизованного компонента, моя проблема в том, что это «имя класса», которое немного сложно преобразовать в стилизованный компонент, есть идеи?
Английский не мой родной язык, поэтому могу ошибаться
Мой код:
import React from 'react'
import "./InfoBox.css"
import { Card } from "@material-ui/core"
function InfoBox({ isRed, active, activetored, ...props }) {
return (
<Card onClick={props.onClick}
className={`infoBox ${active && "infoBox--selected"}
${activetored && "infoBox--selectedtored"}
${isRed && "infoBox--red"} `} >
</Card>
)
}
export default InfoBox
<div className="app__stats">
<InfoBox
isRed
active={typeofCase === "cases"}
onClick={(e) => setTypeofCase('cases')}
/>
<InfoBox
isGreen
active={typeofCase === "recovered"}
onClick={(e) => setTypeofCase('recovered')}
/>
<InfoBox
isRed
activetored={typeofCase === "deaths"}
onClick={(e) => setTypeofCase('deaths')}
/>
</div>
Css такой (можно поставить что угодно):
. infoBox--selected {
border-top: 10px solid greenyellow;
}
. infoBox--selectedtored {
border-top: 10px solid red;
}
. infoBox--red {
border-color: darkblue;
}
2 ответа
Для условных имен классов я предлагаю использовать импорт имен классов: https://www.npmjs.com/package/classnames
Синтаксис действительно легко читается, и вы можете создавать с его помощью сложные имена классов. В вашем случае код может быть примерно таким:
import classNames from 'classnames';
....
className={classNames('infoBox', {
'infoBox--selected': active,
'infoBox--selectedtored': activetored,
'infoBox--red': isRed
})}
Поскольку сначала это было непонятно, вот решение, если вы используете модули CSS вместо этого:
Во-первых, импортируйте актуальные стили из файла CSS:
import * as styles from "./InfoBox.css"
Затем вы можете обратиться к доступным классам в className
, например:
className={styles['infoBox'] + `${active && styles['infoBox--selected']`}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.