2017-10-20 24 views
0

J'utilise React comme une bibliothèque frontale pour mon projet de rails, j'ai eu un problème qui montre les erreurs pour l'utilisateur, j'utilise Ajax pour envoyer une requête mais j'ai trouvé ma fonction rappel erreur auto duplicateur si le côté serveur renvoie des erreurs dans chaque demande à l'intérieur de chaque React.Component quelque chose comme:supprimer dupliquer du projet React

$.ajax({ 
    url: URL, 
    type: METHOD, 
    data: { 
     //data 
    }, 
    success: function() { 
     //calling some function 
    }.bind(this), 
    error(error) { 

     // begin 
     server_errors = JSON.parse(error.responseText); 
     array_of_keys_of_errors = Object.keys(server_errors); 
     for(i = 0 ; i < array_of_keys_of_errors.length; i++){ 
     nested_keys = Object.keys(server_errors[array_of_keys_of_errors[i]]); 
     for(j = 0 ; j < nested_keys.length; j++){ 
      array_of_errors = server_errors[array_of_keys_of_errors[i]][nested_keys[j]]; 
      for(k = 0 ; k < array_of_errors.length; k++){ 
      bootbox.alert({ 
       message: nested_keys[j] + ' ' + array_of_errors[k], 
       closeButton: false, 
      }); 
      } 
     } 
     } 
     // end 
    }, 
    }); 

est-il un moyen efficace de garder mon code loin de la redondance, je pensais à un fichier partagé contient des fonctions partagées et les inclut dans chaque composant React.Component mais je n'ai pas trouvé quelque chose de similaire.

+0

est-ce pas un problème côté serveur? Essayez d'ajouter le mot-clé 'distinct' à votre requête SQL. – fungusanthrax

+0

Non, je duplique le code qui est la réponse pour montrer des erreurs à l'utilisateur dans chaque demande que je fais, c'est mon problème. –

+0

Pouvez-vous partager la fonction d'erreur avec nous –

Répondre

0

Vous pouvez créer une fonction pour gérer vos erreurs:

function handleErrors(errors) { 
    const server_errors = JSON.parse(error.responseText); 
    const array_of_keys_of_errors = Object.keys(server_errors); 
    for(i = 0 ; i < array_of_keys_of_errors.length; i++){ 
    nested_keys = Object.keys(server_errors[array_of_keys_of_errors[i]]); 
    for(j = 0 ; j < nested_keys.length; j++){ 
     array_of_errors = server_errors[array_of_keys_of_errors[i]][nested_keys[j]]; 
     for(k = 0 ; k < array_of_errors.length; k++){ 
     bootbox.alert({ 
      message: nested_keys[j] + ' ' + array_of_errors[k], 
      closeButton: false, 
     }); 
     } 
    } 
    } 
} 

Et partager cette fonction dans vos fichiers.

Vous l'utiliser comme ceci:

$.ajax({ 
    url: URL, 
    type: METHOD, 
    data: { 
    //data 
    }, 
    success: function() { 
    //calling some function 
    }.bind(this), 
    handleErrors 
}) 
+0

J'essayais de le faire au début mais je le faisais incorrectement avec mon projet rails, je crée cette fonction dans un fichier séparé sous 'app/assets/javascript' avec le nom' shared_functions.js' et cela a fonctionné, merci. –