Hec*_*tor 284 javascript css ecmascript-6 reactjs
我是ReactJS和JSX的新手,我对下面的代码有点问题.
我试图className
在每个属性上添加多个类li
:
<li key={index} className={activeClass, data.class, "main-class"}></li>
Run Code Online (Sandbox Code Playgroud)
我的React组件是:
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"));
Run Code Online (Sandbox Code Playgroud)
Dam*_*ica 342
我使用ES6
模板文字.例如:
const error = this.state.valid ? '' : 'error'
const classes = `form-control round-lg ${error}`
Run Code Online (Sandbox Code Playgroud)
然后只需渲染它:
<input className={classes} />
Run Code Online (Sandbox Code Playgroud)
单线版:
<input className={`form-control round-lg ${this.state.valid ? '' : 'error'}`} />
Run Code Online (Sandbox Code Playgroud)
Jac*_*ack 184
我使用类名.例如:
...
var liClasses = classNames({
'main-class': true,
'activeClass': self.state.focused === index
});
return (<li className={liClasses}>{data.name}</li>);
...
Run Code Online (Sandbox Code Playgroud)
0xc*_*aff 140
只需使用JavaScript.
<li className={[activeClass, data.klass, "main-class"].join(' ')} />
Run Code Online (Sandbox Code Playgroud)
如果要在对象中添加基于键和值的类,可以使用以下命令:
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} />
Run Code Online (Sandbox Code Playgroud)
甚至更简单:
const isEnabled = true;
const isChecked = false;
<li className={[isEnabled && 'enabled', isChecked && 'checked']
.filter(e => !!e)
.join(' ')
} />
// Output:
// <li className={'enabled'} />
Run Code Online (Sandbox Code Playgroud)
Jam*_*ber 86
不需要花哨我正在使用CSS模块,这很容易
import style from '/css/style.css';
<div className={style.style1+ ' ' + style.style2} />
Run Code Online (Sandbox Code Playgroud)
这将导致:
<div class="src-client-css-pages-style1-selectionItem src-client-css-pages-style2">
Run Code Online (Sandbox Code Playgroud)
换句话说,两种风格
使用if的相同想法会很容易
const class1 = doIHaveSomething ? style.style1 : 'backupClass';
<div className={class1 + ' ' + style.style2} />
Run Code Online (Sandbox Code Playgroud)
Cod*_*niz 37
这可以通过ES6模板文字来实现:
<input className={`class1 ${class2}`}>
Run Code Online (Sandbox Code Playgroud)
nig*_*yop 29
您可以创建一个具有多个类名的元素,如下所示:
<li className="class1 class2 class3">foo</li>
Run Code Online (Sandbox Code Playgroud)
当然,您可以使用包含类名的字符串并操作此字符串来更新元素的类名.
var myClassNammes = 'class1 class2 class3';
...
<li className={myClassNames}>foo</li>
Run Code Online (Sandbox Code Playgroud)
jas*_*ard 20
使用 CSS 模块(或 Sass 模块),您也可以将样式隔离到特定组件。
\n“组件范围的 CSS 允许您以最小的副作用编写传统的、可移植的 CSS:选择器名称冲突或影响其他组件\xe2\x80\x99 样式的担忧消失了。”
\nimport * as styles from "./whatever.module.css" // css version\nimport * as styles from "./whatever.module.scss" // sass version\n\n<div className={`${styles.class1} ${styles.class2}`}>\n INSERT YOUR CODE HERE\n</div>\n
Run Code Online (Sandbox Code Playgroud)\n\n
Hri*_*mov 18
这是你用ES6做到这一点的方法:
className = {`
text-right
${itemId === activeItemId ? 'active' : ''}
${anotherProperty === true ? 'class1' : 'class2'}
`}
Run Code Online (Sandbox Code Playgroud)
您可以列出多个类和条件,也可以包含静态类.没有必要添加额外的库.
祝好运 ;)
Huw*_*ies 16
不需要外部库 - 只需使用ES6 模板字符串:
<i className={`${styles['foo-bar-baz']} fa fa-user fa-2x`}/>
Run Code Online (Sandbox Code Playgroud)
ash*_*sut 10
一般人都喜欢
<div className={ `head ${style.class1} ${Style.class2}` }><div>
Run Code Online (Sandbox Code Playgroud)
或者
<div className={ 'head ' + style.class1 + ' ' + Style.class2 }><div>
Run Code Online (Sandbox Code Playgroud)
或者
<div className={ ['head', style.class1 , Style.class2].join(' ') }><div>
Run Code Online (Sandbox Code Playgroud)
但是您可以选择创建一个函数来完成这项工作
function joinAll(...classes) {
return classes.join(" ")
}
Run Code Online (Sandbox Code Playgroud)
然后这样称呼它:-
<div className={joinAll('head', style.class1 , style.class2)}><div>
Run Code Online (Sandbox Code Playgroud)
您可以执行以下操作:
<li key={index} className={`${activeClass} ${data.class} main-class`}></li>
Run Code Online (Sandbox Code Playgroud)
一个简短而简单的解决方案,希望这会有所帮助。
也许classnames可以帮助你.
var classNames = require('classnames');
classNames('foo', {'xx-test': true, bar: false}, {'ox-test': false}); // => 'foo xx-test'
Run Code Online (Sandbox Code Playgroud)
它可以通过https://www.npmjs.com/package/clsx完成:
https://www.npmjs.com/package/clsx
首先安装它:
npm install --save clsx
Run Code Online (Sandbox Code Playgroud)
然后将其导入到您的组件文件中:
import clsx from 'clsx';
Run Code Online (Sandbox Code Playgroud)
然后在您的组件中使用导入的函数:
<div className={ clsx(classes.class1, classes.class2)}>
Run Code Online (Sandbox Code Playgroud)
这似乎对我有用
<Link className={[classes.button, classes.buttonFirst]}>
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以像这样创建一个具有多个类名的元素,我尝试了这两种方式,它工作正常......
如果您导入任何 css,那么您可以按照以下方式进行:方式 1:
import React, { Component, PropTypes } from 'react';
import csjs from 'csjs';
import styles from './styles';
import insertCss from 'insert-css';
import classNames from 'classnames';
insertCss(csjs.getCss(styles));
export default class Foo extends Component {
render() {
return (
<div className={[styles.class1, styles.class2].join(' ')}>
{ 'text' }
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
方式2:
import React, { Component, PropTypes } from 'react';
import csjs from 'csjs';
import styles from './styles';
import insertCss from 'insert-css';
import classNames from 'classnames';
insertCss(csjs.getCss(styles));
export default class Foo extends Component {
render() {
return (
<div className={styles.class1 + ' ' + styles.class2}>
{ 'text' }
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
**
如果您将 css 应用为 internal :
import React, { Component, PropTypes } from 'react';
import csjs from 'csjs';
import styles from './styles';
import insertCss from 'insert-css';
import classNames from 'classnames';
insertCss(csjs.getCss(styles));
export default class Foo extends Component {
render() {
return (
<div className={[styles.class1, styles.class2].join(' ')}>
{ 'text' }
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
import React, { Component, PropTypes } from 'react';
import csjs from 'csjs';
import styles from './styles';
import insertCss from 'insert-css';
import classNames from 'classnames';
insertCss(csjs.getCss(styles));
export default class Foo extends Component {
render() {
return (
<div className={styles.class1 + ' ' + styles.class2}>
{ 'text' }
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
const myStyle = {
color: "#fff"
};
// React Element using Jsx
const myReactElement = (
<h1 style={myStyle} className="myClassName myClassName1">
Hello World!
</h1>
);
ReactDOM.render(myReactElement, document.getElementById("app"));
Run Code Online (Sandbox Code Playgroud)
小智 6
更多课程添加
... className={`${classes.hello} ${classes.hello1}`...
Run Code Online (Sandbox Code Playgroud)
小智 5
只需添加,我们就可以过滤出空字符串。
className={[
'read-more-box',
this.props.className,
this.state.isExpanded ? 'open' : 'close',
].filter(x => !!x).join(' ')}
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为我们不需要使用外部包来添加多个类。
我个人使用
<li className={`li active`}>Stacy</li>
or <li className={`li ${this.state.isActive ? 'active' : ''}`}>Stacy<li>
Run Code Online (Sandbox Code Playgroud)
如果需要有条件地添加或删除类,则使用第二个。
我知道这是一个迟到的答案,但我希望这会对某人有所帮助。
考虑到您在 css 文件“ primary ”、“ font-i ”、“ font-xl ”中定义了以下类
<h3 class = {` ${'primary'} ${'font-i'} font-xl`}> HELLO WORLD </h3>
Run Code Online (Sandbox Code Playgroud)
会做的伎俩!
更多信息:https : //www.youtube.com/watch?v=j5P9FHiBVNo&list=PLC3y8-rFHvwgg3vaYJgHGnModB54rxOk3&index=20
创建一个像这样的函数
function cssClass(...c) {
return c.join(" ")
}
Run Code Online (Sandbox Code Playgroud)
需要的时候调用它。
<div className={cssClass("head",Style.element,"black")}><div>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
283312 次 |
最近记录: |