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(...)
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).
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/>'
}))();