CSS 모듈 및 리액트를 사용한 여러 클래스 이름
다음 코드를 사용하여 소품에서 부울을 기반으로 React 컴포넌트에서 className을 동적으로 설정합니다.
<div className={this.props.menuOpen ? 'inactive' : 'active'}>
...
</div>
단, CSS 모듈도 사용하고 있기 때문에 className을 다음과 같이 설정해야 합니다.
import styles from './styles.css';
<div className={styles.sideMenu}>
...
</div>
여러 클래스를 제어하기 위해 클래스 이름을 사용하려고 했지만 className이 둘 다로 설정되도록 최종 결과가 필요하기 때문에 문제가 있습니다.styles.sideMenu
그리고. styles.active
(CSS 모듈을 활성화하기 위해) 어떻게 대처해야 할지 잘 모르겠습니다.
어떤 안내라도 감사합니다.
클래스 이름 및 es6 사용:
let classNames = classnames(styles.sideMenu, { [styles.active]: this.props.menuOpen });
사용.classnames
및 es5:
var classNames = classnames(styles.sideMenu, this.props.menuOpen ? styles.active : '');
파티에는 조금 늦었지만 문자열 템플릿을 사용하는 것이 좋습니다.삼진 연산자를 다른 상수로 옮길 수도 있습니다.
<div className={`${styles.sideMenu} ${this.props.menuOpen ? styles.inactive : styles.active}`>
...
</div>
더 나은 사용법을 추가하고 싶었어요.bind
의 API.classnames
npm. 클래스 이름을 다음과 같이 css에서 가져온 스타일 객체에 바인딩할 수 있습니다.
import classNames from 'classnames/bind';
import styles from './index.css';
let cx = classNames.bind(styles);
다음과 같이 사용합니다.
cx("sideMenu", "active": isOpen)
여기서 sideMenu 및 active는 스타일 객체입니다.
논리 사용AND
3진 연산자 대신에 그 이후로 더 덜 장황하게 만든다.classnames
거짓 값을 생략합니다.
<div className={ classNames(styles.sideMenu, this.props.menuOpen && styles.active) }></div>
이것이 실제 솔루션에 가장 가까운 방법입니다.
const isActive = this.props.menuOpen ? styles.inactive : styles.active;
<div className={isActive + ' ' + styles.sideMenu}>
이렇게 하면 됩니다. 둘 다 가져온 스타일시트의 스타일을 사용할 수 있으며 다음 경우에만 적용됩니다.this.props.menuOpen
이true
.
하지만, 그것은 꽤 진부하다 - 만약 누군가 아이디어가 있다면 나는 더 나은 해결책을 보고 싶다.
사용.Array.join
<div className={[styles.sideMenu, this.props.menuOpen ? styles.show : styles.hide].join(' ')}></div>
CSS 모듈 전문가는 아니지만 다음 문서를 찾았습니다.https://github.com/css-modules/css-modules/blob/master/docs/import-multiple-css-modules.md
다음에 대한 스타일을 조합해야 할 것 같습니다.active
그리고.sideMenu
함께 사용Object.assign
import classNames from 'classnames/bind'
.
다음과 같이 사용할 수 있습니다.
let cx = classNames.bind(styles);
그런 경우에는styles['bar-item-active']
두 번째 대괄호로 묶을 수 있습니다.[styles['bar-item-active']] : your condition
React DOM 요소에 style과 className Atribute를 모두 사용할 것을 제안하는 사람은 없는 것 같습니다.
const sideMenu={backgroundColour:'blue',
border:'1px black solid'}
return <>
<div style={sideMenu} className={this.props.menuOpen ? styles.inactive : styles.active}>
...
</div>
</>
가장 깔끔한 솔루션은 아니지만 프로젝트에 종속성을 추가하는 것을 피할 수 있습니다.side Menu 클래스가 작을 경우 옵션일 수 있습니다.
클래스 이름 라이브러리 사용
import classNames from "classnames";
classNames
함수입니다.끈을 몇 개 건네주면 끈이 다 뭉쳐요.있다면falsy
끈으로 묶으면 통과할 수 없습니다.예를들면
let textColor=undefined
classNames(textColor, "px-2","py-2" )
textColor
이고, 변수는 false입니다.classNames
됩니다.
"px-2 py-2"
도 있어요.classNames
★★★★★★ 。
const active=true
const foo=false
제가 이런 표정을 지었다고 칩시다.
classNames({
'text-green':active,
'text-yellow':foo
})
classNames
이 '값'인 '값'으로 하겠습니다.truthy
를 사용합니다만, 「VALUE「KEY」인 는, 「VALUE」를 「VALUE」로 합니다.falsy
KEY 'KEY'는됩니다.에서는 "은 "active" true" "foo" false"가 됩니다.
'text-green'
예에서는 이 "className"인지 합니다.truth
★★★★★★★★★★★★★★★★★」falsy
, 를 나타냅니다.
let classNames=classNames(
styles.sideMenu,
// based on props that you are passing you can define dynamic classnames in your component
{
"active":this.props.menuOpen
}
)
언급URL : https://stackoverflow.com/questions/38382153/multiple-classnames-with-css-modules-and-react
'programing' 카테고리의 다른 글
확장자가 .js인 파일에서는 JSX가 eslint-config-airbnb에서 허용되지 않습니다. (0) | 2023.03.29 |
---|---|
ReactJs에서 componentWillUnmount()를 올바르게 사용하는 방법 (0) | 2023.03.29 |
.env 파일 변수를 웹 팩 구성에 전달하려면 어떻게 해야 합니까? (0) | 2023.03.29 |
Unix 쉘 스크립트에서 읽을 수 있는 JSON 형식으로 컬 출력 표시 (0) | 2023.03.29 |
연결 문자열에서 서비스 이름 대신 SID를 사용하면 cx_Oracle이 연결되지 않음 (0) | 2023.03.29 |