ESLint-Suppress "ne pas utiliser' new ' pour les effets secondaires"

J'ai vu le moyen de supprimer cela avec jsLint, essayé, cela n'a pas fonctionné.

J'ai besoin du mot-clé 'new' ou mon script ne fonctionne pas.

Comment puis-je supprimer dans .eslintrc ?

Merci Beaucoup

Mise à jour: selon la demande de Jordan. [Veuillez noter que mon application est écrite en ReactJs]

 // 3rd party 
 const AnimateSlideShow = require('../js-animation');

 export default class Animate extends React.Component {

   .......

    fetchJsAnimation() {
      const animation = this.refs.Animation;
      new AnimateSlideShow(animation);
    }
   ......
  }

Erreur: Ne pas utiliser "nouveaux" pour les effets secondaires sans nouveaux

Maintenant, si je satisfait EsLint, mon application craps out:

Non Interceptée (promettre) TypeError: Impossible de définir la propriété "_handleMouse' undefined(...)

22
demandé sur Jordan Running 2015-10-22 20:30:03

2 réponses

Voici la documentation de la règle ESLint en question: http://eslint.org/docs/rules/no-new.html

Interdire new Pour Les Effets Secondaires (no-new)

L'objectif de l'aide de new avec un constructeur est généralement de créer un objet d'un type particulier et de stocker l'objet dans une variable, par exemple:

var person = new Person();

Il est moins courant d'utiliser new et de ne pas stocker le résultat, tel que:

new Person();

Dans ce cas, l'objet créé est jeté loin parce que sa référence n'est stockée nulle part, et dans de nombreux cas, cela signifie que le constructeur doit être remplacé par une fonction qui ne nécessite pas de nouveau à utiliser.

J'ai collé cela ci-dessus parce que je pense qu'il est important de comprendre quelle est l'intention de la règle, et pas seulement comment la faire disparaître.

Si vous ne trouvez pas un moyen de vous débarrasser de new, vous pouvez supprimer cette erreur avec la directive eslint-disable:

fetchJsAnimation() {
  /* eslint-disable no-new */
  const animation = this.refs.Animation;
  new AnimateSlideShow(animation);
}

Les directives ESLint sont à portée de bloc, donc il sera supprimée à l'intérieur de cette fonction. Vous pouvez également supprimer des règles sur une seule ligne avec la directive eslint-disable-line:

new AnimateSlideShow(animation); // eslint-disable-line no-new

Si vous avez vraiment besoin de désactiver cette règle pour l'ensemble de votre projet, alors dans votre section .eslintrc "rules", définissez la valeur de cette règle sur 0:

{
  // ...
  "rules": {
    "no-new": 0,
    // ...
  }
}

Vous pouvez aussi faire un avertissement au lieu d'une erreur en le définissant par 1 (2 est erreur).

49
répondu Jordan Running 2015-10-22 17:58:02

Essayez de couvrir votre fonction dans une fonction anonim

(()=>code)();

Dans votre exemple

fetchJsAnimation() {
  const animation = this.refs.Animation;
  (()=>new AnimateSlideShow(animation))();
}

Ou vous pouvez utiliser ce modèle par exemple cadre javascript moderne par exemple. vuejs vue Voici un exemple

(() => new Vue({ 
    el: '#app', 
    router, 
    store, 
    components: { App }, 
    template: '<App/>' 
}))();
2
répondu sarkiroka 2018-07-13 15:20:48