Правильный способ добавления и удаления классов для кнопок в группе кнопок React / Typescript

#javascript #reactjs

Вопрос:

У меня есть компонент сборника рассказов, используемый в моем проекте, и я хочу создать группу кнопок, которая берет одну из этих кнопок и при нажатии добавляет активный класс, но когда нажимается другая кнопка с тем же классом, она отключает другую, поэтому ее единственная кнопка с активным классом, это для группы кнопок. Пока я могу заставить его работать с одной кнопкой, но если я добавлю больше, то активный класс все равно появится на остальных.

Код до сих пор:

Оригинальный компонент сборника рассказов

 import React from 'react';
import './Button.scss';

interface ButtonProps {
    children: React.ReactNode;
    onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
    variant: string | string;
    className?: string | string;
}

const Button: React.FunctionComponent<ButtonProps> = (props: ButtonProps) => {
    return (
        <button type="button" onClick={props.onClick} className={`btn-${props.variant}`}>{props.children}</button>
    )
}

export default Button;
 

Другой компонент

 const ActiveBtn: React.FunctionComponent = () => {

    const [active, setActive] = React.useState<boolean>(true)
    const handleClick = () => {
        alert()
        setActive(toggle => !toggle)}
    return (
        <>
        <Button variant={active ? 'tertiary' : 'tertiary-active'} onClick={handleClick}>{active ? '.Active' : 'Active'}</Button>
        </>
    )
}
 

используется в компоненте через

 <ActiveBtn />
 

Комментарии:

1. Как вы визуализируете кнопку в виде группы кнопок ?

2. вы пытались создать родительский компонент, у которого есть состояние для activeBtn, у которого есть номер кнопки, и этот компонент имеет 4 или 5 кнопок, затем вы визуализируете кнопку или ActiveBtn в зависимости от значения состояния?

3. Поэтому, чтобы отобразить группу кнопок, я знаю, что это неправильно, но я просто добавляю компонент <ActiveBtn /> 3 раза, что неверно или идеально

4. @WaleedJubeh Нет, вы можете прокомментировать этот подход?