Фильтрация товаров на js без перезагрузки страницы?
Да миллион способов, 
хоть классы с категориями назначай, а потом фильтруй, хоть рендери заново

Способов куча
1. Если тебе надо фильтровать только то, что пришло на страницу ты можешь взять фильтрацию по классу и показывать только те, где classList.contain. 
1.2 Либо вешать дата-параметры.
1.3 Либо загружать их сразу в JS и JS-ом же рисовать.
1.4 А еще лучше загонять в модуль какой от JS-фреймворка, в котором есть реактивность.

А если ты получаешь данные из API, то этот же подход, только модифицированный запросами в сервис, например.