Eu preciso criar um formulário que exibirá algo com base no valor de retorno de uma API. Estou trabalhando com o seguinte código:
class App extends React.Component {
constructor(props) {
super(props);
this.state = {value: ''};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
handleSubmit(event) {
alert('A name was submitted: ' + this.state.value); //error here
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" value={this.state.value} onChange={this.handleChange} /> // error here
</label>
<input type="submit" value="Submit" />
</form>
);
}
}
Estou recebendo o seguinte erro:
error TS2339: Property 'value' does not exist on type 'Readonly<{}>'.
Eu recebi esse erro nas duas linhas que comentei no código. Esse código nem é meu, eu o peguei no site oficial do react ( https://reactjs.org/docs/forms.html ), mas não está funcionando aqui.
Estou usando a ferramenta create-react-app.
reactjs
typescript
Luis Henrique Zimmermann
fonte
fonte
Respostas:
O
Component
é definido assim:O que significa que o tipo padrão para o Estado (e adereços) é:
{}
.Se você deseja que seu componente tenha
value
no estado, é necessário defini-lo assim:Ou:
fonte
Além da resposta do @ nitzan-tomer, você também tem a opção de usar inferfaces :
Ou é bom, desde que você seja consistente.
fonte
O problema é que você não declarou que o estado da interface substitui nenhum pelo seu tipo de variável adequado do 'valor'
Aqui está uma boa referência
fonte
event.target
é do tipoEventTarget
que nem sempre tem um valor. Se for um elemento DOM, você precisará convertê-lo para o tipo correto:Isso inferirá o tipo "correto" para a variável state, embora seja explícito provavelmente seja melhor
fonte