Изменение цвета кнопки при нажатии?(Реагировать + Bootstrap) - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь создать большие пальцы вверх и вниз по аналогии с системой повышения и понижения Reddit.

Я хочу иметь возможность изменить состояние / цвет объекта назеленый, если щелкнул палец вверх, или красный, если щелкнул палец вниз.

НО, я не хочу, чтобы пользователь мог дважды щелкнуть пальцем вверх и перейти от зеленого к стандартному белому ... Есть идеи?

class Counter extends React.Component {
constructor(props) {
    super(props);
    this.state = {counter: 0}
}

increment = (e) => {
    e.preventDefault();
    this.setState({
        counter: this.state.counter + 1
    });
}

decrement = (e) => {
    e.preventDefault();
    this.setState({
        counter: this.state.counter - 1
    });
}

render() {
    return (
        <div className="voting">
            {this.state.counter}
            <button className="upvoteBtn" type="submit" onClick={this.increment}>
                <i className="fa fa-thumbs-up ml-2 mr-2"/>
            </button>
            <button className="downvoteBtn" type="submit" onClick={this.decrement}>
                <i className="fa fa-thumbs-down ml-2 mr-2"/>
            </button>
        </div>
    )
}
}

1 Ответ

0 голосов
/ 25 февраля 2019

Это может дать вам представление.При нажатии на кнопку «вверх» или «вниз» обе кнопки будут отключены.Вы также можете реализовать свою функцию счетчика внутри handleUp и handleDown:

class Sample extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      colorUp: 'secondary',
      colorDown:  'secondary',
      clicked: false
    };

    this.handleUp = this.handleUp.bind(this);
    this.handleDown = this.handleDown.bind(this);
  }

  handleUp(event) {
  if (this.state.clicked === false) {
    this.setState({
      colorUp: 'success',
      clicked: true
    });
   }
  }

  handleDown(event) {
  if (this.state.clicked === false) {
    this.setState({
      colorDown: 'danger',
      clicked: true
    });
    }
  }

  render() {
    return (
    <div>
        <ReactBootstrap.Button className='ml-3' variant={this.state.colorUp} onClick={this.handleUp} disabled={this.state.clicked}>Up</ReactBootstrap.Button>
        <ReactBootstrap.Button className='ml-3' variant={this.state.colorDown} onClick={this.handleDown}  disabled={this.state.clicked}>Down</ReactBootstrap.Button>
        </div>
    );
  }
}

ReactDOM.render(
  <Sample />,
  document.getElementById('root')
);
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/react-bootstrap@next/dist/react-bootstrap.min.js" crossorigin></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/latest/css/bootstrap.min.css" crossorigin="anonymous">

<div id="root" />
...