【发布时间】:2019-09-25 00:19:58
【问题描述】:
我有一个反应表,我正在尝试使用过滤器功能对多个列进行过滤。如果我在一个列上过滤它很好,但如果我添加另一列它只过滤而不是两者。 例如名字“Scott”。我想用它过滤 first_name 列,也用它过滤 biz_name 列。但是,当我选中该框以更改该列的状态时,它只会过滤一个。这是我检查状态以确保其正常工作的复选框。
<Checkbox
label="Business Name"
onCheck={event => {
if (event.target.checked) {
this.setState({
filterBusinessName: true
});
} else {
this.setState({
filterBusinessName: false
});
}
}}
/>
<Checkbox
label="First Name"
onCheck={event => {
if (event.target.checked) {
this.setState({
filterFirstName: true
});
} else {
this.setState({
filterFirstName: false
});
}
}}
/>
然后这里是表格上方的过滤函数:
let items = this.state.contacts
if (this.state.term && items.length > 0) {
let searchTerm = this.state.term.toLowerCase()
items = items.filter(row => {
if(this.state.filterBusinessName && row.biz_name){
return row.biz_name.toLowerCase().includes(searchTerm)
}
if(this.state.filterFirstName && row.first_name){
return row.first_name.toLowerCase().includes(searchTerm)
}
if(this.state.filterFirstName && row.first_name && this.state.filterBusinessName && row.biz_name){
return row.first_name.toLowerCase() == searchTerm || row.biz_name.toLowerCase() == searchTerm
}
})
}
【问题讨论】:
-
直接使用布尔值来节省一些重复的逻辑:
this.setState({ filterBusinessName: event.target.checked });
标签: reactjs filter react-table