[javascript] ReactJS 컴포넌트에 여러 클래스를 추가하는 방법
ReactJS와 JSX를 처음 사용하고 아래 코드에 약간의 문제가 있습니다.
className
각 속성에 여러 클래스를 추가하려고합니다 li
.
<li key={index} className={activeClass, data.class, "main-class"}></li>
내 반응 구성 요소는 다음과 같습니다
var AccountMainMenu = React.createClass({
getInitialState: function() {
return { focused: 0 };
},
clicked: function(index) {
this.setState({ focused: index });
},
render: function() {
var self = this;
var accountMenuData = [
{
name: "My Account",
icon: "icon-account"
},
{
name: "Messages",
icon: "icon-message"
},
{
name: "Settings",
icon: "icon-settings"
}
/*{
name:"Help & Support <span class='font-awesome icon-support'></span>(888) 664.6261",
listClass:"no-mobile last help-support last"
}*/
];
return (
<div className="acc-header-wrapper clearfix">
<ul className="acc-btns-container">
{accountMenuData.map(function(data, index) {
var activeClass = "";
if (self.state.focused == index) {
activeClass = "active";
}
return (
<li
key={index}
className={activeClass}
onClick={self.clicked.bind(self, index)}
>
<a href="#" className={data.icon}>
{data.name}
</a>
</li>
);
})}
</ul>
</div>
);
}
});
ReactDOM.render(<AccountMainMenu />, document.getElementById("app-container"));
답변
내가 사용하는 클래스 이름을 (하지)를 사용하는 클래스를 결정하는 데 필요한 논리의 공정한 금액이있는 경우. 지나치게 간단한 예 :
...
var liClasses = classNames({
'main-class': true,
'activeClass': self.state.focused === index
});
return (<li className={liClasses}>{data.name}</li>);
...
즉, 의존성을 포함하지 않으려면 아래에 더 나은 대답이 있습니다.
답변
ES6
템플릿 리터럴을 사용 합니다. 예를 들면 다음과 같습니다.
const error = this.state.valid ? '' : 'error'
const classes = `form-control round-lg ${error}`
그런 다음 렌더링하십시오.
<input className={classes} />
한 줄짜리 버전 :
<input className={`form-control round-lg ${this.state.valid ? '' : 'error'}`} />
답변
JavaScript 만 사용하십시오.
<li className={[activeClass, data.klass, "main-class"].join(' ')} />
객체에 클래스 기반 키와 값을 추가하려면 다음을 사용할 수 있습니다.
function classNames(classes) {
return Object.entries(classes)
.filter(([key, value]) => value)
.map(([key, value]) => key)
.join(' ');
}
const classes = {
'maybeClass': true,
'otherClass': true,
'probablyNotClass': false,
};
const myClassNames = classNames(classes);
// Output: "maybeClass otherClass"
<li className={myClassNames} />
또는 더 간단합니다.
const isEnabled = true;
const isChecked = false;
<li className={[isEnabled && 'enabled', isChecked && 'checked']
.filter(e => !!e)
.join(' ')
} />
// Output:
// <li className={'enabled'} />
답변
연결
화려할 필요는 없습니다. CSS 모듈을 사용하고 있습니다.
import style from '/css/style.css';
<div className={style.style1+ ' ' + style.style2} />
결과는 다음과 같습니다.
<div class="src-client-css-pages-style1-selectionItem src-client-css-pages-style2">
즉, 두 스타일
조건부
if와 같은 아이디어를 사용하는 것이 쉽습니다.
const class1 = doIHaveSomething ? style.style1 : 'backupClass';
<div className={class1 + ' ' + style.style2} />
답변
ES6 템플릿 리터럴을 사용하면됩니다.
<input className={`class1 ${class2}`}>
답변
다음과 같이 여러 클래스 이름을 가진 요소를 만들 수 있습니다.
<li className="class1 class2 class3">foo</li>
당연히 클래스 이름이 포함 된 문자열을 사용하고이 문자열을 조작하여 요소의 클래스 이름을 업데이트 할 수 있습니다.
var myClassNammes = 'class1 class2 class3';
...
<li className={myClassNames}>foo</li>
답변
ES6를 사용하여이를 수행 할 수 있습니다.
className = {`
text-right
${itemId === activeItemId ? 'active' : ''}
${anotherProperty === true ? 'class1' : 'class2'}
`}
여러 클래스와 조건을 나열 할 수 있으며 정적 클래스를 포함 할 수도 있습니다. 추가 라이브러리를 추가 할 필요는 없습니다.
행운을 빕니다 😉