Comment éviter les non-param-réaffecter lors de la définition d'une propriété sur un objet DOM
J'ai une méthode qui a pour objet principal de définir une propriété sur un objet DOM
function (el) {
el.expando = {};
}
J'utilise AirBnB du code de style qui rend ESLint jeter un no-param-reassign
erreur:
erreur d'Affectation de paramètre de la fonction " el " non-param-réaffecter
Comment puis-je manipuler un objet DOM passé comme un argument tout en se conformant AirBnB du code de style?
Quelqu'un m'a suggéré d'utiliser /* eslint react/prop-types: 0 */
se référant à une autre question mais si je ne me trompe pas, cela s'applique bien pour réagir, mais pas pour les natifs de manipulation du DOM.
Aussi je ne pense pas que changer le style de code est une réponse. Je crois que l'un des avantages de l'utilisation d'une norme de style est en cohérence du code à travers les projets et de modifier les règles à volonté se sent comme un usage abusif de l'un des principaux style de code comme AirBnB est.
Pour l'enregistrement, j'ai demandé à AirBnB sur GitHub, ce qu'ils pensent est la voie à suivre dans ces cas dans le numéro 766.
- désactiver cette règle?
- Nah. Tout d'abord, que signifie la désactivation de ce pour toutes les autres occurrences où cette règle est logique. Deuxièmement, je crois que vous suivez un guide de style ou n'en ont pas. Au moins si c'est un guide de style suivie par de nombreux développeurs à travers toutes sortes de projets.
- Mais vous vous demandez comment ne pas obéir à la styleguide, parce que vous êtes de faire la chose, c'est d'essayer de prévenir. En tout cas, désactiver pour que la fonction
- Double Possible de Comment faire pour désactiver ESLint réagir/prop-types de règle dans un fil?
- Non j'ai trouver le sens de la règle, mais il ne fonctionne tout simplement pas pour ce cas précis. Je me demandais si il existe un moyen de faire jouer les règles.
- Peu importe comment vous le mot, l'opération que vous souhaitez en conflit avec la règle. Cela dit, il semble comme une XY problème; je ne fixez pas directement des propriétés de nœuds DOM comme ça.
- Je crois que vous suivez un guide de style ou de" ne pas". Seulement lorsque cela a du sens. Aveuglément à la suite de quelque chose est-cargo culte de la programmation.
Vous devez vous connecter pour publier un commentaire.
Comme @Mathletics l'indique, vous pouvez désactiver la règle entièrement en ajoutant ceci à votre
.eslintrc.json
fichier:Ou vous pouvez désactiver la règle spécifiquement pour les param propriétés
Sinon, vous pouvez désactiver la règle pour que la fonction
Ou pour qui que la ligne de
Vous pouvez également consulter cette post de blog sur la désactivation de la ESLint règles spécialement pour accueillir AirBnB du guide de style.
res.session
tout de suiteComme cet article explique, cette règle vise à éviter la mutation de la
arguments
de l'objet. Si vous attribuez à un paramètre et puis essayer de l'accès à certains paramètres via learguments
objet, elle peut conduire à des résultats inattendus.Vous pouvez garder la règle intacte et de maintenir le AirBnB de style en utilisant une autre variable pour obtenir une référence à l'élément DOM et ensuite le modifier:
En JS objets (y compris des nœuds DOM) sont passés par référence, donc, ici,
el
ettheElement
sont des références pour le même nœud DOM, mais la modification detheElement
n'est pas muter learguments
objet depuisarguments[0]
reste juste une référence à cet élément du DOM.Cette approche est suggérée dans le la documentation pour la règle:
Personnellement, je voudrais juste utiliser le
"no-param-reassign": ["error", { "props": false }]
à l'approche d'un couple de d'autres réponses mentionnées. La modification d'une propriété de l'paramètre n'est pas muter ce qui se rapporte à ne pas courir sur les types de problèmes cette règle est d'essayer d'éviter.Vous pouvez remplacer cette règle à l'intérieur de votre
.eslintrc
fichier et de le désactiver pour les param propriétés de ce typeDe cette façon, la règle est toujours actif, mais il ne sera pas avertir des propriétés.
Plus d'infos: http://eslint.org/docs/rules/no-param-reassign
La
no-param-reassign
avertissement de sens que pour les fonctions, mais pour un classiqueArray.forEach
en boucle sur un tableau qui vous avez l'intention de muter, il n'est pas approprié.Cependant, pour contourner ce problème, vous pouvez également utiliser
Array.map
avec un nouvel objet (si vous êtes comme moi, n'aiment pas répéter les mises en garde, avec des commentaires):Ceux qui souhaitent sélectivement désactiver cette règle pourrait être intéressé par un proposition de nouvelle option pour la
no-param-reassign
règle qui permettrait à une "liste blanche" de noms d'objets à l'égard desquels paramètre réaffectation doit être ignorée.Vous pouvez également utiliser lodash
assignIn
qui transforme l'objet.assignIn(obj, { someNewObj });
https://lodash.com/docs/4.17.2#assignIn
Vous pouvez utiliser les méthodes de mise à jour des données. Ex. "res.statut(404)" au lieu de "res.statusCode = 404"J'ai trouvé la solution. https://github.com/eslint/eslint/issues/6505#issuecomment-282325903
À la suite de la la documentation:
Vous pouvez utiliser:
Object.assign
c'est pour la copie à partir d'un objet à un objet cible. Essayez de le copier à partir d'un élément du DOM comme que les résultats dans un objet vide.Object.assign
ne fonctionnera pas correctement si vous essayez de re-assing une propriété sur l'Objet avec des références circulaires (une connexion de socket par exemple).Object.assign
, par défaut, une copie superficielle et profonde, le clonage est très mal vu à cause de l'impact sur les performances.