Не могли бы вы помочь мне с этим довольно простым вопросом. Мне нужно добавить класс «active» после нажатия кнопки и удалить все остальные «активные» классы.Как добавить класс с помощью React.js?
Посмотрите здесь, пожалуйста: http://goo.gl/duLPlG
var Tags = React.createClass({
setFilter: function(filter) {
this.props.onChangeFilter(filter);
},
render: function() {
return <div className="tags">
<button className="btn active" onClick={this.setFilter.bind(this, '')}>All</button>
<button className="btn" onClick={this.setFilter.bind(this, 'male')}>male</button>
<button className="btn" onClick={this.setFilter.bind(this, 'female')}>female</button>
<button className="btn" onClick={this.setFilter.bind(this, 'child')}>child</button>
<button className="btn" onClick={this.setFilter.bind(this, 'blonde')}>blonde</button>
</div>
}
});
var Kid = React.createClass({
render: function() {
return <ul>
<li>{this.props.name}</li>
</ul>
}
});
var List = React.createClass({
getInitialState: function() {
return {
filter: ''
};
},
changeFilter: function(filter) {
this.setState({
filter: filter
});
},
render: function() {
var list = this.props.Data;
if (this.state.filter !== '') {
list = list.filter((i)=> i.tags.indexOf(this.state.filter) !== -1);
console.log(list);
}
list = list.map(function(Props){
return <Kid {...Props} />
});
return <div>
<h2>Kids Finder</h2>
<Tags onChangeFilter={this.changeFilter}/>
{list}
</div>
}
});
var options = {
Data: [{
name: 'Eric Cartman',
tags: ['male', 'child']
},{
name: 'Wendy Testaburger',
tags: ['female', 'child']
},{
name: 'Randy Marsh',
tags: ['male']
},{
name: 'Butters Stotch',
tags: ['male', 'blonde', 'child']
},{
name: 'Bebe Stevens',
tags: ['female', 'blonde', 'child']
}]
};
var element = React.createElement(List, options);
React.render(element, document.body);
Как мне сделать это лучше здесь?
Я бы предложил создать компонент «кнопка», а не просто передать кучу ссылок под ваш компонент «Теги». Затем для каждой кнопки вы можете условно установить атрибут className условно. Это может помочь: https://github.com/JedWatson/classnames –
@JohnGibbons, я не хочу добавлять какие-либо другие утилиты. Я думаю, что это просто. Обновите проект codepen с. –
Помните, какая кнопка была нажата в состоянии компонента. –