【发布时间】:2020-05-25 09:06:53
【问题描述】:
我正在尝试像这样创建一个动态过滤器: 设置状态:
const [cuisineFilter, setCuisineFilter] = React.useState(() => (venuesByCountry: Venue) =>
venuesByCountry.venueTypes.toString().includes('foo'),
)
要改变的功能:
function filterC(cuisine: string) {
setCuisineFilter(() => (venuesByCountry: Venue) => venuesByCountry.venueTypes.toString().includes(cuisine))
}
遍历数组并创建独特的按钮:
const typeFilter = data?.venuesByCountry
.reduce((acc, item) => {
item.venueTypes.forEach(v => {
acc.indexOf(v) < 0 ? acc.push(v) : null
})
return acc
}, [])
.map(a => (
<>
<Button $style={{ marginRight: '6px', marginBottom: '6px' }} onClick={() => filterC(a)}>
{a.toString().replace(/_/g, ' ')}
</Button>
</>
))
简化按钮:
const typeFilter = data?.venuesByCountry
.map(a => (
<>
<Button $style={{ marginRight: '6px', marginBottom: '6px' }} onClick={() => filterC(a)}>
{a.toString().replace(/_/g, ' ')}
</Button>
</>
))
但无论出于何种原因,这实际上并没有为我过滤任何东西......任何想法?
【问题讨论】:
-
你为什么用
reduce() -
有一个大数据源,有很多场地,每个场地都有多种类型,所以可能有50个'bar'但我只想要一个'bar'按钮,所以我使用reduce来删除所有倍数
标签: javascript arrays reactjs typescript filter