Деактивировать ввод с помощью нажатия кнопки

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

Это мой пример кода:

import React from "react";
import Button from 'react-button'

const Typing = (props) => {
    var disabled = "disabled";
    var enabled = !disabled;

  const handleUserInput = (event) => props.onUserInput(event.target.value);
  const handleGameClik = (props) => {

      disabled = enabled;
  }
  return(
      <div>

          <input
              className = "typing-container"
              value = {props.currentInput}
              onChange = {handleUserInput}
              placeholder=" ^__^ "
              disabled = {disabled}/>
          <Button  onClick = {handleGameClik}> Start Game  </Button>
          <Button> Fetch Data </Button>

          </div>
          );
};

Ответ 1

Упрощенное решение с использованием состояния может выглядеть так:

class Typing extends React.Component {
  constructor(props) {
    super(props);
    this.state = { disabled: false }
  }
  handleGameClik() {
    this.setState( {disabled: !this.state.disabled} )
  } 
  render() {
    return(
        <div>
          <input
                className = "typing-container"
                placeholder= " type here "
                disabled = {(this.state.disabled)? "disabled" : ""}/>
          <button  onClick = {this.handleGameClik.bind(this)}> Start Game  </button>
          <button> Fetch Data </button>
        </div>
    );
  }
};

Здесь работает Кодепэн.

Ответ 2

** 2019 **

другой вариант - использовать крючок реагирующих крючков useState.

import React, {useState} from 'react';

function Typing(props) {
  const [disabled, setDisabled] = useState(false);

  function handleGameClick() {
    setDisabled(!disabled);
  }

  return (
    <div>
      <input
        className='typing-container'
        placeholder=' type here '
        disabled={disabled}
      />
      <button type='submit' onClick={handleGameClick}> Start Game </button>
      <button> Fetch Data </button>
    </div>
  );
}

Ответ 3

Это может сбить вас с толку, но ребята из React.js на самом деле перестраивают каждый компонент формы и делают их почти точно похожими на нативный HTML-компонент. Однако есть некоторые различия.

В HTML вы должны отключить поле ввода следующим образом:

<input disabled="disabled" />

Но в React.js вам придется использовать:

<input disabled={true} />

Принятый пример работает, потому что все, что не 0, считается true. Поэтому "disabled" также интерпретируется как true.