通过单击按钮取消激活输入

Sec*_*Son 17 components input onclick button reactjs

我有这个基本组件,我希望只要我点击一个按钮就可以取消激活或激活文本字段.我怎样才能做到这一点?

这是我的示例代码:

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>
          );
};
Run Code Online (Sandbox Code Playgroud)

win*_*elt 29

使用state的简化解决方案可能如下所示:

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>
    );
  }
};
Run Code Online (Sandbox Code Playgroud)

在这里工作Codepen.

  • 你不需要做`{(this.state.disabled)?"禁用":""}`当道具是假的时候|| null它会自动被省略.`disabled = {this.state.disabled}`就足够了. (24认同)

Sam*_*Sam 7

这可能会让你感到困惑,但 React.js 的人实际上重建了每个表单组件,并使它们看起来几乎与原生 HTML 组件完全一样。然而,也存在一些差异。

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

<input disabled="disabled" />
Run Code Online (Sandbox Code Playgroud)

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

<input disabled={true} />
Run Code Online (Sandbox Code Playgroud)

接受的例子有效,因为没有0考虑任何事情true。因此"disabled"也解释为true


Sec*_*Son 7

** 2019年**

另一个选择是使用react-hooks的hook 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>
  );
}
Run Code Online (Sandbox Code Playgroud)

  • 或者,如果你的“disabled”状态依赖于其他一些 prop 或 state 项,请使用 [useMemo](https://reactjs.org/docs/hooks-reference.html#usememo)。 (2认同)