Я сделал компонент переключения (точнее, Аккордеон)
Я отображаю массив объектов и перечисляю их как:
{object.map((o) => (
<Accordion key={o.id} title={o.question} className="item">
<div className="text"> { o.answer } <div/>
</Accordion>
))}
Это выглядит примерно так:
> Question 1
> Question 2
> Question 3
Теперь, каждый раз, когда я нажимаю на вопрос, он переключается вниз, чтобы показать ответ. Все это прекрасно работает (я использовал зацепки).
Я хочу иметь возможность изменять непрозрачность всех непереключенных элементов в этом списке при открытии ОДНОГО из вопросов.
Так что если Я открываю вопрос 2, он становится «текущим элементом», а непрозрачность вопроса 2 и его ответ должны составлять 100%, а все остальные (вопрос 1 и вопрос 3) должны уменьшаться или уменьшать непрозрачность на 50%. Я могу сделать это с помощью : hover, используя css, но это работает только при наведении.
В принципе, я должен иметь возможность выбрать элемент и удалить базовый класс из всех других элементов, кроме выбранного. Я не знаю, как это сделать на самом деле. Помогите. Я чувствую, что упускаю что-то очевидное.
const Accordion = ({ title, children, opened = false }) => {
const [show, setShow] = useState(opened);
const rotation = classnames('icon', {
'rotate': show,
});
const content = classnames('contents', {
'closed': !show,
});
useEffect(() => {
setShow(opened);
}, [opened]);
const toggle = useCallback(() => {
setShow(!show);
}, [show]);
return (
<div className='titleContainer' onClick={toggle}>
<div className={rotations}>
<i className='icon' />
</div>
<h5 className='title'>{title}</h5>
</div>
<div className={content}>{children}</div>
);
};