J'ai une fonction d'impression, il définit d'abord l'état de 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> 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>):
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
}
}
}
});
};
5 Réponses :
Comment avez-vous utilisé la fonction 'mediaquerylist.addlistener'? Vous pouvez consoler les deux "ceci" et voir s'ils sont identiques. P>
Essayez ceci.
Merci, je ne reçois plus l'erreur, mais l'état ne se met pas à jour vers false code>.
à la deuxième fois, au lieu de SetState code>, renvoyez simplement le nouvel état comme: return {
isPrinting: false,
};
Ceci devrait aider SetState code> doit renvoyer un nouvel état plutôt que d'essayer d'exécuter n'importe quoi. p> p>
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
})
}
Pourriez-vous fournir tout le composant s'il vous plaît
Avez-vous défini
guidon code> fonction à l'intérieur de la classe?@Vikashsingh oui,
exportation de classe de classes par défautSultsLsLstSulel étend le composant { code>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.