IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

React Discussion :

Erreur: Cannot read property 'done' of undefined


Sujet :

React

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut Erreur: Cannot read property 'done' of undefined
    Bonjour
    Je démarre sur React et je rencontre une erreur que je ne comprend pas, pourtant mon code a l'air bon. Merci de m'aider.
    Voici l'erreur :
    Nom : React_App.png
Affichages : 136
Taille : 84,6 Ko

    Et voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    import React from 'react';
    import logo from './logo.svg';
    import './App.css';
     
     
    class App extends React.Component {
      constructor(props){
          super(props)
          this.state = {
            heading: "Liste de courses",
            items: 
                 [
                   {text: "Déposer les enfants à l'école", done: false },
                   {text: "Faire les courses", done: false },
                   {text: "Faire du vélo", done: false },
                   {text: "Passer à la pharmacie", done: false }
                 ]
               }
      }
    markDone = (todo) => {
      let todos = this.state.items.map(t => {
        if(t.text == todo.text) {
          return Object.assign({}, t, { //Object.assign clone l'objet t
            done: !t.done
          })
        }
      })
      this.setState({items: todos})  //setState met à jour l'etat local en remplaçant items par todos
    }
      render() {
        return (
            <div className="container">
            <br />
             <div className="row">
                 <div className="col-md-6 offset-3">
              <h1>{this.state.heading}</h1>
              <ul>
                {this.state.items.map(item => {return(<li className={ item.done ? "done" : ""} onClick={() => this.markDone(item)} key={item.text}>{item.text}</li>)})}
              </ul>
                 </div>
            </div>
            </div>
     
        )
     
     
    }
     
     
    }
     
     
    export default App;
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  2. #2
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Salut,
    c'est parce que dans markDone, tu ne traites pas le cas où ton élément n'est pas celui cliqué (tu ne renvoies rien).
    Comme tu ne renvoies rien, tu te retrouves avec des undefined à la place des éléments qui ne vérifient pas l'égalité, et du coup tu ne peux pas lire done de undefined.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    markDone = (todo) => {
      let todos = this.state.items.map(t => {
        if(t.text == todo.text) {
          return Object.assign({}, t, { //Object.assign clone l'objet t
            done: !t.done
          })
        }
       return t;
      })
      this.setState({items: todos})  //setState met à jour l'etat local en remplaçant items par todos
    on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
    Pas de question technique par MP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/03/2021, 09h11
  2. Message d'erreur cannot read property 'box' of undefined"
    Par homeland21 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/01/2018, 16h53
  3. Erreur : TypeError: Cannot read property 'test' of undefined
    Par deathness dans le forum AngularJS
    Réponses: 1
    Dernier message: 11/05/2016, 10h42
  4. Réponses: 3
    Dernier message: 30/05/2015, 12h08
  5. Réponses: 15
    Dernier message: 15/06/2013, 01h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo