J'ai une application écrite en JavaScript avec réaction. Lorsque vous cliquez sur un bouton dans Safari sur iOS, l'ONCLICK exécute la fonction spécifiée dans son corps, mais cette fonction prend une autre fonction de rappel et que la fonction de rappel ne se déclenche pas.
Si je viens d'envoyer le rappel sans anonyme fonction, ça fonctionne. Mais si j'utilise une fonction anonyme pour appeler le rappel, cela ne fonctionne pas. P>
Le code ci-dessous est une extraction du rendu () - méthode de la classe de réaction. P>
Cela ne fonctionne pas dans Safari sur iOS (mais fonctionne simplement bien en chrome sur iOS): p> Ceci fonctionne dans Safari sur iOS et chrome sur iOS: P> <button className="button-top-level" data-selenium-id="preview"
onClick={() => {
this.props.saveApplicationFunction(null, this.refs.downloadButton.click());
}} type="button"><i className="material-icons">picture_as_pdf</i>Download a <span className="mobile-hide">copy of your </span>application</button>
4 Réponses :
Le premier exemple Vous passez une fonction qui doit être appelée sur votre SaveApplicationFunction code> pour obtenir la fonction
Cliquez sur CODE>, le deuxième exemple que vous passez à votre
SaveApplicationfunction code> le retour du
Cliquez sur CODE> Fonction appelée dans cette portée. P>
Utilisez un écouteur d'événement en JS, pas l'attribut HTML.
document.getElementsByClassName("button-top-level").addEventListener("click", function() { /*Your code here*/ });
J'utilise réagi et je ne suis pas sûr que ce soit la bonne façon d'y aller, désolé de ne pas mentionner que explicitement (la poste originale a été modifiée pour mentionner que maintenant)
mon devinez est votre p> SaveApplicationFunction code> prend un
Callback code> comme deuxième argument. Vous devez simplement passer le nom de la fonction fort>. Ce que vous faites est
function handler(value, callback){
callback(value);
}
const callbackFunc = val => {
if(val) console.log(val);
return ()=>console.log('I do Nothing');
}
handler(5, callbackFunc); //Your Second Snippet
handler(5, callbackFunc()); //Your First Snippet
Le premier exemple fonctionne bien en chrome pour iOS, pourquoi est-ce?
Lequel fonctionne sur iOS et lequel fonctionne sur chrome?
Le premier fonctionne en chrome sur iOS, deuxième fonctionne dans Safari sur iOS.
dans le premier extrait code> Vous appelez la fonction de réponse et la valeur de retour de la fonction en tant que paramètre mais p>
dans second snippet code> Vous ne faites que passer
définition de fonction code> et je pense que la fonction
this.props.saveapplicationfunction code> n'accepte pas le deuxième deuxième paramètre à être un rappel qui appellera. P>
Vous
SaveApplicationFunction code> prend une fonction de rappel comme deuxième argument. Vous devez simplement passer le nom de la fonction. Ce que vous faites, c'est appeler la fonction dans le deuxième argument. Ce que cela fait en retour est simplement défini la valeur de retour de la fonction comme rappel.
Où est le code de SaveApplicationFunction () ?? Dans votre premier exemple, vous transmettez une référence à une fonction qui arrive ensuite une fonction. Dans votre deuxième exemple, vous passez une fonction qui est immédiatement appelée