停用输入以通过单击按钮做出反应

Deactivate input in react with a button click

我有这个基本组件,我希望在单击按钮时停用或激活文本字段。我怎样才能做到这一点?

这是我的示例代码:

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>
          );
};

使用状态的简化解决方案如下所示:

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>
    );
  }
};

工作Codepen here

这可能会让您感到困惑,但是 React.js 的人实际上重建了每个表单组件并使它们看起来几乎与原生 HTML 组件完全一样。不过也有一些不同。

在 HTML 中,您应该禁用这样的输入字段:

<input disabled="disabled" />

但是在 React.js 中你必须使用:

<input disabled={true} />

可接受的示例有效,因为任何不是 0 的内容都被视为 true。因此 "disabled" 也被解释为 true.

** 2019 年 **

另一种选择是使用 react-hooks 的钩子 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>
  );
}
const [disabled , setDisabled] = useState(true) 
if(condition){ 
 setDisabled(false)
}else{ 
 setDisabled(true) 
} 
return
<TextField placeholder="Name" disabled={ disabled} />