#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 }