Активный стиль кнопки React

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

Вот мой код:

export class ABC extends Component {
    configFile = require('../../resources/stubs/config.json')

    constructor(props) {
        super(props);
        this.state = {
            cSelected: [],
            isHidden: true,
            level: this.configFile.Level,
            amount: this.configFile.amount,
            des1: this.configFile.desc1,
            des2: this.configFile.desc2,
            des3: this.configFile.desc3,

        }
        this.onRadioBtnClick = this.onRadioBtnClick.bind(this);
    };

    onRadioBtnClick(cSelected, aSelected, d1, d2, d3) {
        this.setState({
             cSelected,
             aSelected,
             d1,
             d2,
             d3
       });
    }



    render(){
        return (
          <div>
            <ButtonGroup>
                <Button className = "circleIcon" 
                        onClick = {() => this.onRadioBtnClick(this.state.level, this.state.amount, this.state.des1, this.state.des2, this.state.des3, )} 
                        active = {this.state.cSelected === 1}><img src = {incirclePurple}  
                        alt = "profile-tab-icon" />|<span className = "numberCircle">1</span></Button>
                <Button className = "circleIcon" onClick = {() => this.onRadioBtnClick("Circle2", "$1,000-$2,499", this.state.des1, this.state.des2, this.state.des3)} active = {this.state.cSelected === 2}><img src = {incirclePurple}  alt = "profile-tab-icon" />|<span className = "numberCircle">2</span></Button>
                <Button className = "circleIcon" onClick = {() => this.onRadioBtnClick("Circle3", "$2,500-$4,999", this.state.des1, this.state.des2, this.state.des3)} active = {this.state.cSelected === 3}><img src = {incirclePurple}  alt = "profile-tab-icon" />|<span className = "numberCircle">3</span></Button>
                <Button className = "circleIcon" onClick = {() => this.onRadioBtnClick("Circle4", "$5,000-$9,999", this.state.des1, this.state.des2, this.state.des3)} active = {this.state.cSelected === 4}><img src = {incirclePurple}  alt = "profile-tab-icon" />|<span className = "numberCircle">4</span></Button>
                <Button className = "circleIcon" onClick = {() => this.onRadioBtnClick("Circle5", "$10,000-$34,999", this.state.des1, this.state.des2, this.state.des3)} active = {this.state.cSelected === 5}><img src = {incirclePurple}  alt = "profile-tab-icon" />|<span className = "numberCircle">5</span></Button>
                <Button className = "circleIcon" onClick = {() => this.onRadioBtnClick("Circle6", "$35,000-$74,999", this.state.des1, this.state.des2, this.state.des3)} active = {this.state.cSelected === 6}><img src = {incirclePurple}  alt = "profile-tab-icon" />|<span className = "numberCircle">6</span></Button>
                <Button className = "circleIcon" onClick = {() => this.onRadioBtnClick("President's Circle", ">$74,999", this.state.des1, this.state.des2, this.state.des3)} active = {this.state.cSelected === 7}><img src = {incirclePurple}  alt = "profile-tab-icon" />|<span className = "numberCircle">7</span></Button>
                <Button className = "circleIcon" onClick = {() => this.onRadioBtnClick("Chairman's Circle", ">$74,999", this.state.des1, this.state.des2, this.state.des3)} active = {this.state.cSelected === 8}><img src = {incirclePurple}  alt = "profile-tab-icon" />|<span className = "numberCircle">8</span></Button>
            </ButtonGroup>   
            <div>
                <p>{this.state.cSelected}{this.state.aSelected}</p>
                <ul>
                    <li>{this.state.d1}</li>
                    <li>{this.state.d2}</li>
                    <li>{this.state.d3}</li>
                </ul>
            </div> 
        </div>) 
    }
}

С какой проблемой вы столкнулись?

Agney 02.05.2018 06:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
3 954
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете указать уникальное свойство name для каждой кнопки и создать состояние activeButton, которое будет принимать значение имени активированной кнопки:

handleActiveButton(e) {
  e.preventDefault();

  const activeName = e.target.name;
  this.setState({ activeName });
}

Затем в опоре ваших кнопок className вы можете сделать что-то вроде className = { this.state.activeName === 'button1' ? 'active' : '' }

Где button1 - это имя кнопки, а active - ваш класс css для отображения значка вашего изображения.

Большое спасибо за помощь Нену !! Я очень ценю это. Прошу прощения, если это глупый вопрос, но я добавил событие на своей кнопке.

Pink 02.05.2018 21:38

<ButtonGroup> <Button className = {this.state.activeName === «1»? 'active': 'circleIcon'} name = "1" onClick = {(event) => this.onRadioBtnClick (event, this.state.data [0] .Level, this.state.data [0] .amount, this .state.data [0] .desc1, this.state.data [0] .desc2, this.state.data [0] .desc3)} active = {this.state.cSelected === "1"}> < img src = {this.state.incircleImage} alt = "profile-tab-icon" /> | <span className = "numberCircle"> 1 </span> </Button> </ButtonGroup>

Pink 02.05.2018 21:43

и попытался установить состояние activeName ::: onRadioBtnClick (e, cSelected, aSelected, d1, d2, d3) {this.setState ({cSelected, aSelected, d1, d2, d3}); e.preventDefault (); const activeName = e.target.name; console.info ("activeName = " + activeName); this.setState ({activeName}); } Я получаю неопределенное значение для e.target.name. Надеюсь, я не совершаю ужасной ошибки. Еще раз спасибо за вашу помощь.

Pink 02.05.2018 21:43

Я понял!!

Заполнено значение activeName через id

Спасибо!!

полный код пожалуйста

Muh Zulzidan 27.05.2021 05:09

Другие вопросы по теме