То, что вам не хватает, это возврат из вашего filter
метода в функции ItemList
.
.filter(i => {
// Here
return i.categories.map(category => {
return category.id === selectedCategoryId;
})})
.map(i => (
...
));
Но логика здесь неверна. Потому что метод map
внутри метода filter
всегда будет возвращать массив. Вместо этого используйте метод fiter
, который не является тем, что вы хотите в результате.
Вы можете попробовать что-то вроде этого:
...
.filter(i => i.categories.filter(category => category.id === selectedCategoryId))
...
Но этого недостаточно. Потому что, когда вы проверяете category.id
внутри каждого item
, метод фильтра возвращает пустой массив , если ids
не совпадает.
Это означает, что вы всегда будете возвращать все items
Чтобы исправить это, вы должны вернуть boolean
в верхнюю filter
операцию.
...
// Instead of this:
const currentItems = items.filter(i=> i.categories.filter(category => category.id === selectedCategoryId))
// Something like this:
const currentItems = items.filter(i=> {
const categoryExists = i.categories.filter(category => category.id === selectedCategoryId))
return categoryExists.length > 0;
}) // then map through and render them!!
...
Вот рабочий пример:
![Edit Fix 'show items when select categories'](https://codesandbox.io/static/img/play-codesandbox.svg)
Дайте мне знать, помогло ли это!