Je suis un tutoriel pour débutants de Pluralsight, lors de la soumission d'un formulaire, une valeur est transmise à addUser
et j'ai besoin d'envoyer le nom de l'utilisateur à this.state.users
mais j'obtiens l'erreur suivante
App.jsx:14 Uncaught TypeError: Cannot read property 'users' of undefined
Composant
import React from 'react'
import User from 'user'
import Form from 'form'
class Component extends React.Component {
constructor() {
super()
this.state = {
users: null
}
}
// This is triggered on form submit in different component
addUser(userName) {
console.log(userName) // correctly gives String
console.log(this.state) // this is undefined
console.log(this.state.users) // this is the error
// and so this code doesn't work
/*this.setState({
users: this.state.users.concat(userName)
})*/
}
render() {
return (
<div>
<Form addUser={this.addUser}/>
</div>
)
}
}
export default Component
13 votes
addUser = (userName) => {
2 votes
@Andrew Pourquoi avez-vous besoin d'écrire de cette manière ?
2 votes
Pour la liaison automatique du contexte dans cette fonction, mais cela semble incorrect ici.
0 votes
Je sais :p c'est juste que je préfère le bind à la place. C'est sale mais ça marche..
0 votes
@MayankShukla, je ne suis pas sûr de savoir pourquoi l'erreur est comme ça au lieu de
Cannot read property 'state' of undefined
?0 votes
Je n'aime pas le bind, parce que si vous avez beaucoup de méthodes, vous aurez beaucoup de copypast comme ceci
this.addUser = this.addUser.bind(this)
dans un constructeur.0 votes
@Mr.Alien mais je pense que c'est la meilleure façon de maintenir le contexte parce que dans le cas de plusieurs fonctions, si nous mettons tous les liens à l'intérieur d'un constructeur inutile, cela augmente le nombre de lignes :)
0 votes
@MayankShukla Yep pas de refus :)
0 votes
@Andrew l'erreur est Impossible de lire la propriété 'users' d'undefined Je pense que .
0 votes
Si j'écris addUser = (userName) => { .... alors l'erreur est index.js:3 Uncaught Error : Impossible de trouver le module "./App", cela casse tout.
0 votes
@MayankShukla, est-ce que cela signifie en
this.state.users
nous l'avons définie, mais sansstate
classée ?3 votes
@IvanTopic met cette ligne dans le constructeur :
this. addUser = this. addUser.bind(this)
cette syntaxe est la syntaxe de l'initialisateur de propriété son a ceci est expérimental syntaxe vous devez utiliser le plugin babel pour cela.0 votes
Merci, cela fonctionne. Btw J'ai bien Babel, je joue avec ceci github.com/krasimir/react-webpack-starter