我想在react.js中动态设置active
类,但是它不起作用!
我正在使用setState()
方法来更改所选项目。
这行代码不起作用。
className={selectedCategoryId === item.id ? 'active' : ''}
我认为setState()
函数无法正常工作...
const {open, selectedProduct, productCategory, filteredProducts, selectedCategoryId} = this.state;
const categoryItems = productCategory.map((item) =>
<a key={item.id}
onClick={() => this.handleFilter(item.id)}
className={selectedCategoryId === item.id ? 'active' : ''}
// className={()=>this.isActive(item.id)}
className="pointer"
>{item.value}</a>
);
这不会更改类:
handleFilter = (id) => {
const filteredItem = this.state.productList.filter(x => x.categoryId == id);
this.setState({filteredProducts: filteredItem, selectedCategoryId: id});
}
但是当我选择所有标签时,这会正确更改className:
handleRemoveFilter = () => {
this.setState({filteredProducts: this.state.productList, selectedCategoryId: 0});
}
//-------------------------------
<div className="tag-list">
<a onClick={this.handleRemoveFilter}
className="pointer"
className={ this.state.selectedCategoryId === 0 ? 'active' : ''}
>All tags</a>
{categoryItems}
</div>
答案 0 :(得分:0)
将类名称与所选项目一起存储。您可以随时根据需要更新状态中的类名。
例如,
<a key={item.id}
onClick={() => this.handleFilter(item.id)}
className={this.state.activeClassName}
可以在handlefilter内更新活动类名
答案 1 :(得分:0)
最常见的方法之一是使用classnames,您可以有条件地将className连接在一起
var classNames = require('classnames');
class Button extends React.Component {
// ...
render () {
var btnClass = classNames({
btn: true,
'btn-pressed': this.state.isPressed,
'btn-over': !this.state.isPressed && this.state.isHovered
});
return <button className={btnClass}>{this.props.label}</button>;
}
}
答案 2 :(得分:0)
如果setState()正常工作,请尝试以下操作:
<a onClick={this.handleRemoveFilter}
className={ this.state.selectedCategoryId === 0 ? 'pointer active' : 'pointer'}
>All tags</a>