Пытаюсь создать функцию переключения, чтобы изменить состояние 2 кнопок с отключенных на включенные на основе события onClick, прикрепленного к третьей кнопке

#reactjs #button #onclick #toggle #setstate

#reactjs #кнопка #onclick #переключение #setstate

Вопрос:

У меня есть набор из 3 кнопок, где мне нужно установить начальное состояние для двух кнопок как отключенное, а затем создать событие onClick для третьей кнопки, которое включало бы обе кнопки при нажатии. Я подумываю о том, чтобы установить атрибут disabled в state, а затем создать функцию для onClick, которая будет нацелена на состояние обеих кнопок и установит для нее значение false. Мой текущий код приведен ниже, есть идеи о том, как этого добиться?

 import React, { Component } from 'react';
import { render } from 'react-dom';
import { Button } from 'antd';
import "antd/dist/antd.css";
import './style.css';

class App extends Component {
  constructor() {
    super();
    this.state = {
      disabled: undefined
    };
  }

  toggleSwitch(){
    alert("you clicked the switch");
  }

  render() {
    return (
      <div>
        <Button disabled={true}>Modify Docs</Button>
        <Button disabled={true}>Upload Docs</Button>
        <Button onClick={this.toggleSwitch}>Unlock Quote</Button>
      </div>
    );
  }
}

render(<App />, document.getElementById('root'));

  

Ответ №1:

Вы почти на месте.

В вашем методе рендеринга вы установили, disabled={true} что означает, что он будет постоянно оставаться true вместо проверки значения свойства disabled в состоянии.

Метод переключения должен просто отрицать предыдущее значение отключено.

 import React, { Component } from 'react';
import { render } from 'react-dom';
import { Button } from 'antd';
import "antd/dist/antd.css";
import './style.css';

class App extends Component {

  state = {
    disabled: true,
  };

  toggleSwitch() {
    // when toggling, we just negate the previous value
    this.setState(previousState => ({
      disabled: !previousState.disabled,
    }))
  }

  render() {
    // Buttons will use the same value from state
    // to check if they should be disabled
    const { disabled } = this.state;

    // instead of setting disabled={true}, reference the disabled
    // property from state
    return (
      <div>
        <Button disabled={disabled}>Modify Docs</Button>
        <Button disabled={disabled}>Upload Docs</Button>

        {/* we set the text of the button depending on the value of disabled */}
        <Button onClick={this.toggleSwitch}>
          {disabled ? 'Unlock Quote' : 'Lock Quote'}
        </Button>
      </div>
    );
  }
}

render(<App />, document.getElementById('root'));
  

Кроме того, рассмотрите возможность использования своего рода компонента переключения вместо третьей кнопки для улучшения пользовательского опыта.