0
votes

Statut n'est pas défini

J'ai une fonction d'impression, il définit d'abord l'état de Isprinting code> à true et ouvre une boîte de dialogue Pring. Une fois que la boîte de dialogue est fermée, il définit l'état de Isprinting code> sur false code> et à ce stade, je reçois l'erreur (deuxième SETState code>):

non capucifauméeError: la fixation n'est pas définie p> blockQuote>

i Fonction de liaison au contexte actuel avec la fonction de flèche. P>

  handlePrint = () => {
    this.setState({ isPrinting: true }, () => { //setState is working working properly
      window.print();
      if (window.matchMedia) {
        var mediaQueryList = window.matchMedia('print');
        mediaQueryList.addListener = (mql) => {
          if (!mql.matches) {
            this.setState({ isPrinting: false }); //Error
          }
        }
      }
    });
  };


4 commentaires

Pourriez-vous fournir tout le composant s'il vous plaît


Avez-vous défini guidon fonction à l'intérieur de la classe?


@Vikashsingh oui, exportation de classe de classes par défautSultsLsLstSulel étend le composant {


Stackoverflow.com/a/20279485/1320407 Cette réponse explique pourquoi la SETState n'est pas définie dans le rappel de MediaQuyList.Addlistener. Essayez la réponse de Prabu-Samvel pour une solution APT.


5 Réponses :


-1
votes

Comment avez-vous utilisé la fonction 'mediaquerylist.addlistener'? Vous pouvez consoler les deux "ceci" et voir s'ils sont identiques.


0 commentaires

1
votes

Essayez ceci. XXX


1 commentaires

Merci, je ne reçois plus l'erreur, mais l'état ne se met pas à jour vers false .



0
votes

à la deuxième fois, au lieu de SetState code>, renvoyez simplement le nouvel état comme:

return {
  isPrinting: false,
};


0 commentaires

0
votes

Ceci devrait aider xxx

SetState doit renvoyer un nouvel état plutôt que d'essayer d'exécuter n'importe quoi.


0 commentaires

1
votes

Je ne suis pas sûr de ce que vous essayez d'atteindre ici mais la fenêtre .print () code> gèle em> l'application. Il n'y a pas de code de code à moins que quelqu'un clique sur l'écran d'impression. Je travaille juste comme window.alert ("...") code>. Vous pouvez essayer cela en imprimant un thimestamp juste après le win.print code>. Donc, outre qu'il y a un problème avec le présent contexte qui ne peut pas être atteint toute la fonction est inutile. Parce que vous pouvez simplement faire:

  handlePrint = () => {
    this.setState({ isPrinting: true }, () => {
      window.print() //freezes until someone clicks it away.
      this.setState({ isPrinting: false }) //Error
    })
  }


0 commentaires