Как изменить цвет фона кнопки onClick в react js?

#javascript #reactjs #button #background-color

#javascript #reactjs #кнопка #background-color

Вопрос:

Существует более одной кнопки, использующей функцию map и отображающей ее. Хотите изменить цвет фона кнопки, которую я нажимаю. А другие хотят, чтобы все было как есть. И снова, когда я нажимаю на другую кнопку, тогда меняется только цвет BG только этой кнопки. Есть два файла. Один идентификатор компонента определяет компонент кнопки с помощью функции map, а другой — компонент кнопки. Основной компонент

  state = {
        categories: [],
        selectedCategory: null,
        value: 'test',
        clicked1: false,
    }
categorySelectedHandler = (id ,e) => {
        this.setState({ selectedCategory: id });
    }

const categoriesName = this.state.categories.map((category ,index) => {
            // console.log("The current iteration is: "   index);
                let visible_in_pricing_page = category.visible_in_pricing_page
                    
                    if (visible_in_pricing_page) {
                        return <CategoryBtn
                            index = {index}
                            name={category.title}
                            key={category.id}
                            selectedId = {this.state.selectedCategory}
                            clicked={() => this.categorySelectedHandler(category.id)}
                />
            }
        });
 

Компонент CategoryBtn —

 import React, { Component  } from 'react';
import classes from './price-category-btn.css';

const CategoryBtn = props  => {
    
        return (
            <div style={{display:"inline"}} >
                <a>
                    <button 
                    className= { classes.category_btn } 
                    onClick={props.clicked}>{props.name}</button></a>
            </div>
        )
    }

export default CategoryBtn;
 

Ответ №1:

Вы передаете selectedId prop компоненту CategoryBtn, вы можете использовать его или уже можете передать логическое значение

 const categoriesName = this.state.categories.map((category, index) => {
  // console.log("The current iteration is: "   index);
  let visible_in_pricing_page = category.visible_in_pricing_page

  if (visible_in_pricing_page) {
    return <CategoryBtn
    index = {
      index
    }
    name = {
      category.title
    }
    key = {
      category.id
    }
    {/** indicate this is the selected button  */}
    selected = {this.state.selectedCategory === category.id} 
    clicked = {
      () => this.categorySelectedHandler(category.id)
    }
    />
  }
});
 

В компоненте categoryBtn верните кнопку с динамическим классом

 <button 
    {/** use props.selected to dynamically set the class */}
    className={`${classes.category_btn} ${props.selected}` ? classes.selectedCss : ''}
    onClick={props.clicked}
 >
   {props.name}
 </button>
 

И в вашем модуле CSS у вас может быть класс для цвета фона

 .selectedCss
{ background-color: lightblue;}
 

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

1. Я пробую тот же код, на который вы ответили выше, но результат по умолчанию BG цвет btn отображается зеленым. И я хочу, чтобы класс по умолчанию classes.category_btn и после изменения щелчка на classes.selectedCss @Ashu

2. Затем измените троичный файл в соответствии с вашими потребностями: className={props.selected ? classes.selectedCss : classes.category_btn }