Для связи чекбоксов с фильтрами и создания массива `selectedFilters` в React вы можете использовать состояние и обработчики событий. Основная идея заключается в хранении выбранных фильтров в состоянии и обновлении этого состояния при изменении состояния чекбоксов.
Вот пример, как это можно реализовать:
1. Создайте компонент `Checkbox`, который будет принимать свойства и обрабатывать событие изменения.
2. Создайте основной компонент, который будет управлять состоянием выбранных фильтров.
### Пример реализации:
```jsx
import React, { useState } from 'react';
// Компонент Checkbox
const Checkbox = ({ filter, isChecked, onChange }) => {
return (
<label>
<input
type="checkbox"
checked={isChecked}
onChange={(e) => onChange(filter, e.target.checked)}
/>
{filter.label}
</label>
);
};
// Основной компонент Products
const Products = () => {
const [selectedFilters, setSelectedFilters] = useState([]);
// Пример фильтров
const filters = [
{ id: 1, label: 'Фильтр 1' },
{ id: 2, label: 'Фильтр 2' },
{ id: 3, label: 'Фильтр 3' },
];
// Обработчик изменения состояния чекбокса
const handleCheckboxChange = (filter, isChecked) => {
if (isChecked) {
// Добавляем фильтр в массив, если он выбран
setSelectedFilters((prevFilters) => [...prevFilters, filter]);
} else {
// Убираем фильтр из массива, если он снят
setSelectedFilters((prevFilters) =>
prevFilters.filter((f) => f.id !== filter.id)
);
}
};
return (
<div>
<h2>Фильтры</h2>
{filters.map((filter) => (
<Checkbox
key={filter.id}
filter={filter}
isChecked={selectedFilters.some((f) => f.id === filter.id)}
onChange={handleCheckboxChange}
/>
))}
<h3>Выбранные фильтры:</h3>
<pre>{JSON.stringify(selectedFilters, null, 2)}</pre>
</div>
);
};
export default Products;
```
### Пояснение:
1. **Checkbox**: Этот компонент принимает фильтр, состояние `isChecked` и функцию `onChange`. Он рендерит чекбокс, который будет отмечен или нет в зависимости от `isChecked`.
2. **Products**: Этот компонент содержит массив доступных фильтров и состояние `selectedFilters`.
3. **handleCheckboxChange**: Этот метод используется для добавления и удаления фильтров в массив `selectedFilters`. Если чекбокс отмечен, соответствующий объект фильтра добавляется в массив, иначе — удаляется.
4. **isChecked**: Для каждого чекбокса мы проверяем, содержится ли данный фильтр в `selectedFilters`, чтобы правильно отобразить его состояние.
Таким образом, когда вы взаимодействуете с чекбоксами, массив `selectedFilters` будет обновляться, и вы сможете видеть текущие выбранные фильтры.