停用输入以通过单击按钮做出反应
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} />
我有这个基本组件,我希望在单击按钮时停用或激活文本字段。我怎样才能做到这一点?
这是我的示例代码:
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} />