Реагировать переключать активный класс между массивом групп кнопок

#javascript #arrays #reactjs

#язык JavaScript #массивы #реагирует на

Вопрос:

Я сделал фотогалерею с фильтром для категорий, но я хочу, чтобы кнопка «Активная категория» содержала active класс

Я отображаю кнопки, сопоставляя их с galleryData массивом

 {  galleryData.map((item, index) =gt; (  lt;button  key={index}  onClick={() =gt; filterGalley(item.category)}  className="filter-button"  gt;  {item.category}  lt;/buttongt;  )); }  

И после щелчка я фильтрую элементы галереи по категориям. value Это строка типа категории

 const filterGalley = (value) =gt; {  if (value === "all") {  setGalleryItems(galleryData);  return;  }   const filteredData = galleryData.filter((item) =gt; item.category === value);   console.log(value);  setGalleryItems(filteredData); };  

Как я могу передать active класс в просматриваемую в данный момент категорию? onMount должен быть all , а после этого тот, который нажат.

Ответ №1:

Определите состояние для категории activeCategory и используйте его для active класса:

 const [activeCategory, setActiveCategory] = useState('all'); const filterGalley = (value) =gt; {  setActiveCategory(value);  if (value === 'all') {  setGalleryItems(galleryData);  return;  }   const filteredData = galleryData.filter(  (item) =gt; item.category === value  );   console.log(value);  setGalleryItems(filteredData); };  

И используйте его:

 {galleryData.map((item, index) =gt; (  lt;button  key={index}  onClick={() =gt; filterGalley(item.category)}  className={"filter-button "   (activeCategory === item.category ? 'active' : '')}  gt;  {item.category}  lt;/buttongt; ))}