Как я могу изменить стиль кнопки с помощью React?

Теперь я пытаюсь изменить стиль кнопки, когда событие щелчка происходит с реакцией.

Так что я подумал, что это правильный путь.

this.setState({
            [e.target.className]:'button-hidden'
        })

но не вышло.
Я хочу, чтобы при нажатии кнопки отображалось значение «скрыто» или «нет». Как я мог получить доступ к этой проблеме? не могли бы вы мне намекнуть?

Код JS такой.

export default class PlanBtn extends React.Component{
    state = {
        data:[{time:'1', value:'plug1', display:'button-hidden'},
           ... dummy data,]
    }
removePlan=(e)=>{
    console.info(e.target)
    this.setState({
        [e.target.className]:'button-hidden'
    })
}

render(){
    const list = this.state.data.map(
        btn => (<button onClick = {this.removePlan} className = {btn.display}>{btn.value}</button>)
    )
    return (
        <div id='plan-contain'>
            <div className='plan'>
                {list}
            </div>
        </div>
    )
}

}

и css

#plan-contain{
    text-align: center;
    width: 100%;
    padding: 0 0.2px;
}

.plan{
    width:96%;
    border-radius: 3px;
    margin: 1px 1px;
}

.button-hidden{
    visibility: hidden;
    width:9%;

}
.button-reveal{
    width:9%;
    padding:0.5%;
    background-color: #00cc99;
    color: white;
    border: none;
    margin: 1px 1px;
    text-decoration: none;
    -webkit-transition-duration: 0.4s;
    transition-duration: 0.4s;
    cursor: pointer;
}

.button-reveal:hover{
    background-color: white;
    color: #00cc99;
    border: 2px solid #00cc99;
}

Как я мог это обработать? если вы мне поможете, я буду очень рад

Поведение ключевого слова "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) для оценки ваших знаний,...
1
0
56
2

Ответы 2

Свойство отображения для конкретного элемента данных в состоянии лучше всего обновлять. Итак, я настроил функцию removePlan, чтобы взять ключ элемента. Возможно, стоит даже создать компонент для каждого элемента данных и управлять состоянием отображения там.

Проверь это -

class PlanBtn extends React.Component {
  state = {
    data: [{ time: "1", value: "plug1", display: "button-reveal" }, 
    { time: "2", value: "plug2", display: "button-reveal" }]
  };
  removePlan = (e, i) => {
    console.info(e.target);
    const dataNew = [...this.state.data];
    dataNew[i].display = "button-hidden";
    this.setState({
      data: dataNew
    });
  };

  render() {
    console.info("here");
    const list = this.state.data.map((btn, i) => (
      <button onClick = {e => this.removePlan(e, i)} className = {btn.display}>
        {btn.value}
      </button>
    ));
    return (
      <div id = "plan-contain">
        <div className = "plan">{list}</div>
      </div>
    );
  }
}

Вы можете попробовать что-то подобное.

export default class PlanBtn extends React.Component{
        state = {
            data:[{time:'1', value:'plug1', display:'button-hidden'},
               ... dummy data,],
            showStyle:flase

        }
    removePlan=(e)=>{
        console.info(e.target)
        this.setState({
            showStyle:!this.state.showStyle
        })
    }

    render(){
        const list = this.state.data.map(
            btn => (<button onClick = {this.removePlan} 
           className = {`${this.state.showStyle?'button-reveal':'button-hidden'}`}
            >{btn.value}</button>)
        )
        return (
            <div id='plan-contain'>
                <div className='plan'>
                    {list}
                </div>
            </div>
        )
    }

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