224 votes

La propriété 'valeur' n'existe pas sur le type 'Lecture seule <{}>'

J'ai besoin de créer un formulaire qui affiche quelque chose basé sur la valeur de retour d'une API. Je suis en train de travailler 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é le code. Ce code n'est même pas le mien, je l'ai eu à partir du réagir site officiel (https://reactjs.org/docs/forms.html), mais il n'est pas de travail ici.

Im en utilisant le créer-réagir l'application de l'outil.

367voto

Nitzan Tomer Points 11798

Le Component est défini comme suit :

 interface Component<P = {}, S = {}> extends ComponentLifecycle<P, S> { }
 

Cela signifie que le type par défaut pour l'état (et les accessoires) est: {} .
Si vous voulez que votre composant ait value dans l'état, vous devez le définir comme suit:

 class App extends React.Component<{}, { value: string }> {
    ...
}
 

Ou:

 type MyProps = { ... };
type MyState = { value: string };
class App extends React.Component<MyProps, MyState> {
    ...
}
 

85voto

LeoTM Points 1

Outre la réponse de @ nitzan-tomer, vous avez également la possibilité d’utiliser des inferfaces :

 interface MyProps {
  ...
}

interface MyState {
  value: string
}

class App extends React.Component<MyProps, MyState> {
  ...
}
 

Soit c'est bien, tant que vous êtes cohérent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X