Können Sie mir mit dieser ziemlich einfachen Frage helfen. Ich brauche die Klasse "aktiv" nach dem Klicken auf den Button und entferne alle anderen "aktiven" Klassen. hierWie füge ich eine Klasse mit React.js hinzu?
Schauen Sie bitte: 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);
Wie kann ich es besser machen hier?
Ich würde vorschlagen, eine "Schaltfläche" -Komponente zu machen, anstatt nur ein paar Links unter Ihrer "Tags" -Komponente zu rendern. Dann können Sie für jede Schaltfläche das Attribut className bedingt setzen. Dies könnte helfen: https://github.com/JedWatson/classnames –
@JohnGibbons, ich möchte keine anderen Dienstprogramme hinzufügen. Ich denke, es ist eine einfache Sache. Aktualisieren Sie das Codepen-Projekt mit. –
Erinnern Sie sich, auf welche Schaltfläche im Status der Komponente geklickt wurde. –