【发布时间】:2021-01-12 23:21:45
【问题描述】:
我有一个表,我希望能够对其应用多个过滤器。我当前的代码将按电子邮件或状态进行过滤,但我希望它同时执行这两种操作,以便用户可以优化结果。
我尝试在filteredInvoices 变量中添加&& 而不是||。
我允许用户选择他们想要使用的过滤器并将其存储在 useState 中的对象中。如果过滤器处于活动或非活动状态,我也会跟踪状态。
const [filter, setFilter] = useState({active: false})
用户选择过滤器的过滤器对象如下所示:
filter: {active: true, customerEmail: 'johndoe@gmail.com', status: 'open'}
当用户将此过滤器应用于表时,当过滤器更改时,我会在 useEffect 中调用一个名为 updateFilter() 的函数。然后,这会将过滤后的数组设置为状态,然后在 return 中迭代。
const updateFilter = () => {
const filteredInvoices = invoices.filter((inv) => {
const emailMatch = filter.customerEmail && inv.customerEmail.toLowerCase().includes(filter.customerEmail.toLowerCase())
const statusMatch = inv.status === filter.status
return emailMatch || statusMatch
})
setListToRender(filteredInvoices)
}
useEffect(() => {
if (filter.active) {
updateFilter()
}
}, [filter])
被过滤的状态是一个对象数组。
如何通过添加到过滤器对象中的多个条件进行过滤?
是否有一个通用的设计可以让我向过滤器对象添加额外的过滤器并且它也可以工作?
例如 - johndoe@gmail.com 有 10 张发票 - 3 张未结,4 张已付款,3 张作废。如果过滤器对象如下所示:
如何过滤以仅显示该客户的未结发票。
提前感谢您的任何建议!
【问题讨论】:
标签: javascript arrays reactjs filter