Деактивировать ввод с помощью нажатия кнопки
У меня есть этот базовый компонент, и я хочу, чтобы текстовое поле было деактивировано или активировано всякий раз, когда я нажимаю кнопку. Как я могу это достичь?
Это мой пример кода:
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
.