J'ai besoin de créer un formulaire qui affichera quelque chose en fonction de la valeur de retour d'une API. Je travaille avec le code suivant:
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>
);
}
}
J'obtiens l'erreur suivante:
error TS2339: Property 'value' does not exist on type 'Readonly<{}>'.
J'ai eu cette erreur dans les deux lignes que j'ai commentées sur le code. Ce code n'est même pas le mien, je l'ai obtenu sur le site officiel de react ( https://reactjs.org/docs/forms.html ), mais il ne fonctionne pas ici.
J'utilise l'outil create-react-app.
reactjs
typescript
Luis Henrique Zimmermann
la source
la source
Réponses:
Le
Component
est défini comme ceci:Ce qui signifie que le type par défaut pour l'état (et accessoires) est:
{}
.Si vous voulez que votre composant soit
value
dans l'état, vous devez le définir comme ceci:Ou:
la source
En plus de la réponse de @ nitzan-tomer, vous avez également la possibilité d'utiliser des inferfaces :
Les deux sont bien, tant que vous êtes cohérent.
la source
Le problème est que vous n'avez pas déclaré l'état de votre interface, remplacez-les par le type de variable approprié de la 'valeur'
Voici une bonne référence
la source
event.target
est d'un typeEventTarget
qui n'a pas toujours de valeur. S'il s'agit d'un élément DOM, vous devez le convertir dans le type correct:Cela permettra également de déduire le type "correct" de la variable d'état, bien qu'il soit probablement préférable d'être explicite
la source